以下内容均来自: http://www.runoob.com/redis/redis-tutorial.html
一、redis 基础
含义: REmoteDIctionary Servers 是key-value存储系统。
特点: C语言编写,基于内存可持久化的日志型
别名:数据结构服务器,值可以是字符串,哈希,列表,集合,有序集合
优点:
1支持数据持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载。支持备份。
2性能好:读:11万次/秒,写:8.1万次/秒
3数据类型丰富:字符串,列表,哈希,集合等
4原子操作
5支持key过期等
安装:
Linux安装
目前使用的redis版本是4.0.7的
参考:
https://www.jianshu.com/p/ebda253a8daa
yum install redis -y
systemctl start redis.service
systemctl
enable
redis.service
二、
Redis
配置
http://www.runoob.com/redis/redis-conf.html
三
、
Redis
数据类型
string(
字符串
)
,
hash(
哈希
),list(
列表
),set(
集合
),zset(
有序集合
)
3.1 String
string
是
Redis
最基本的数据类型,一个键最大能存储
512MB
3.2 Hash
含义
:
是键值
(key=>value)
对集合
是
string
类型的
field
和
value
的映射标,
hash
适合存储对象
3.3 List
Redis
的字符串列表,按照插入顺序排序
3.4 Set
集合,是
string
类型的无序集合
集合是通过哈希表实现的,添加,删除,查找的复杂度是
O(1)
3.5 zset
有序集合,包含
string
类型元素
每个元素会关联
double
分数,进行排序
四、 Redis命令
含义:在redis服务上执行操作
redis-cli启动客户端
检验redis服务是否启动
redis 127.0.0.1:6379> PING 远程服务上执行命令 redis-cli -h host -p port -a password 例子: redis-cli -h 127.0.0.1 -p 6379 -a "mypass" 五、Redis键(key) 作用:管理redis的键 语法: COMMAND KEY_NAME
127.0.0.1:6379>SET machao redis
OK
127.0.0.1:6379>DEL machao
(integer)1
键删除成功:输出1
否则输出:0
Rediskeys命令
1)DEL key-value
在key存在时删除key
2)DUMP key
序列化给定key,返回被序列化的值
3)EXISTS key-value
检查key是否存在
4)EXPIREkey seconds
为给定key设置过期时间
5) EXPIREATkey timestamp
EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳
6) PEXPIREkey milliseconds
设置key的过期时间以毫秒计。
7)KEYS pattern
查找所有符合给定模式的key
8)MOVEkey db
将当前数据库的key移动到给定的数据库db当中
9)PERSIST key
将key持久化
10)TTL key
以秒为单位,返回给定key的剩余生存时间
11)RENAME key newkey
修改key的名称
12)TYPEkey
返回key所储存的值的类型
六、Redis字符串
1) SETkey value
设置指定 key 的值
2) GETkey
获取指定 key 的值。
3 GETSETkey value
将给定 key 的值设为 value ,并返回 key 的旧值 (oldvalue) 。
七、Redis哈希
含义:这里的哈希实际时string类型的filed和value的映射,适用存储对象
例子:
127.0.0.1:6379>HMSET people name "chao" score "329"
OK
127.0.0.1:6379>HGETALL people
1)"name"
2)"chao"
3)"score"
4)"329"
127.0.0.1:6379>HGET people score
"329"
1 ) HDELkey field1 [field2]
删除一个或多个哈希表字段
2) HEXISTSkey field
查看哈希表 key 中,指定的字段是否存在。
3) HGETkey field
获取存储在哈希表中指定字段的值。
4) HGETALLkey
获取在哈希表中指定 key 的所有字段和值
5) HKEYSkey
获取所有哈希表中的字段
八、Redis列表
列表:是字符串列表,按照插入顺序排序
可以添加元素到列表头部(左边)或者尾部(右边)
例子:
127.0.0.1:6379>LPUSH scores 309
(integer)1
127.0.0.1:6379>LPUSH scores 329
(integer)2
127.0.0.1:6379>LRANGE scores 0 10
1)"329"
2)"309"
命令:
1) BLPOPkey1 [key2 ] timeout
移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
2) BRPOPkey1 [key2 ] timeout
移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
3) BRPOPLPUSHsource destination timeout
从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它;如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
4) LINDEXkey index
通过索引获取列表中的元素
5)
|
九、Redis集合(Set)
是String类型数据
127.0.0.1:6379>SADD names chao
(integer)1
127.0.0.1:6379>SADD names yan
(integer)1
127.0.0.1:6379>SADD names chao
(integer)0
1) SADDkey member1 [member2]
向集合添加一个或多个成员
2) SCARDkey
获取集合的成员数
3) SDIFFkey1 [key2]
返回给定所有集合的差集
4) SDIFFSTOREdestination key1 [key2]
返回给定所有集合的差集并存储在 destination 中
5) SINTERkey1 [key2]
返回给定所有集合的交集
十、 Redis 有序集合 (sortedset)
含义:有序集合,关联double类型分数
例子:
127.0.0.1:6379>ZADD age 1 chao
(integer)1
127.0.0.1:6379>ZADD age 2 yan
(integer)1
1) ZADDkey score1 member1 [score2 member2]
向有序集合添加一个或多个成员,或者更新已存在成员的分数
2) ZCARDkey
获取有序集合的成员数
3) ZCOUNTkey min max
计算在有序集合中指定区间分数的成员数
4) ZINCRBYkey increment member
有序集合中对指定成员的分数加上增量 increment
5) ZINTERSTOREdestination numkeys key [key ...]
计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合key中
十一、Redis发布订阅
含义:发布订阅是消息通信模式,发送者发送消息,订阅者接收消息
Publish
channel
clien1client2 client3
命令:
创建一个频道:
127.0.0.1:6379>SUBSCRIBE redisChat
Readingmessages... (press Ctrl-C to quit)
1)"subscribe"
2)"redisChat"
3)(integer) 1
1)"message"
2)"redisChat"
3)"Redis is great"
1)"message"
2)"redisChat"
3)"Study hard"
发送消息:
127.0.0.1:6379>PUBLISH redisChat 'Redis is great'
(integer)1
127.0.0.1:6379>PUBLISH redisChat 'Study hard'
(integer)1
1 |
PSUBSCRIBEpattern [pattern ...] |
2 |
PUBSUBsubcommand [argument [argument ...]] |
3 |
PUBLISHchannel message |
4 |
PUNSUBSCRIBE[pattern [pattern ...]] |
5 |
SUBSCRIBEchannel [channel ...] |
6 |
UNSUBSCRIBE[channel [channel ...]] |
具体参见:
http://www.runoob.com/redis/redis-pub-sub.html
十二、Redis事务
特点:Redis事务可以一次执行多哥命令
批量操作在发送EXEC命令钱被放入队列缓存
收到EXEC命令后进入事务执行,事务中某命令失败,其余命令依赖被执行
事务执行,其他命令不会插入到事务中
事务执行阶段:
开始事务,命令入队,执行事务
本质:打包批量执行脚本,失败不会回滚也不会导致后面命令不执行
例子:
事务以MULTI开始事务,将多好哥命令粗怒队列,执行事务
127.0.0.1:6379>multi
OK
127.0.0.1:6379>set a aaa
QUEUED
127.0.0.1:6379>set b bbb
QUEUED
127.0.0.1:6379>set c ccc
QUEUED
127.0.0.1:6379>exec
1)OK
2)OK
3)OK
具体命令:
1) DISCARD
取消事务,放弃执行事务块内的所有命令。
2) EXEC
执行所有事务块内的命令。
3) MULTI
标记一个事务块的开始。
4) UNWATCH
取消WATCH命令对所有key的监视。
5) WATCHkey [key ...]
监视一个(或多个)key ,如果在事务执行之前这个(或这些)key 被其他命令所改动,那么事务将被打断。
参见:
http://www.runoob.com/redis/redis-transactions.html
十三、Redis脚本
含义:Redis脚本用Lua解释其执行,执行脚本的常用命令为EVAL
Eval命令语法如下:
EVAL script numkeys key [key ...] arg [arg ...]
例子:
127.0.0.1:6379>EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2first second
1)"key1"
2)"key2"
3)"first"
4)"second"
1 |
|
2 |
|
3 |
SCRIPTEXISTS script [script ...] |
4 |
SCRIPTFLUSH |
5 |
SCRIPTKILL |
十四、Redis连接
Redis连接命令用于连接redis服务
redis 127.0.0.1:6379> AUTH "password" OK
1 |
AUTHpassword |
2 |
ECHOmessage |
3 |
PING |
4 |
QUIT |
5 |
SELECTindex |
十五、Redis服务器
Redis服务器用于管理redis服务
127.0.0.1:6379>INFO
#Server
redis_version:3.2.10
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:c8b45a0ec7dc67c6
redis_mode:standalone
os:Linux3.10.0-514.el7.x86_64 x86_64
arch_bits:64
命令:
1 |
BGREWRITEAOF |
2 |
BGSAVE |
3 |
|
4 |
CLIENTLIST |
5 |
CLIENTGETNAME |