Keys指令
- EXISTS key [key…] 查询一个key是否存在
127.0.0.1:6379> set name duanjiaqi
OK
127.0.0.1:6379> exists name
(integer) 1
127.0.0.1:6379> exists age
(integer) 0
- KEYS pattern查找所有匹配给定的模式的键
127.0.0.1:6379> keys *
1) "zl_live_room_detail339217"
2) "videos"
3) "live_room_person_count_numbers:339087"
4) "zl_live_room_detail339087"
5) "user_device_id"
6) "videos_20210201"
7) "live_room_num_info_frequency:339087"
8) "videos_20210114"
9) "live_room_max_number:339087"
10) "videos_20210113"
11) "live_room_num_info_frequency:339217"
127.0.0.1:6379> keys video*
1) "videos"
2) "videos_20210201"
3) "videos_20210114"
4) "videos_20210113"
- PERSIST key移除key的过期时间
- TTL key获取key的有效时间,-1为永不过期,-2已经过期
127.0.0.1:6379> expire name 30
(integer) 1
127.0.0.1:6379> ttl name
(integer) 27
127.0.0.1:6379> persist name
(integer) 1
127.0.0.1:6379> ttl name
(integer) -1
127.0.0.1:6379> get name
"duanjiaqi"
- RANDOMKEY 返回一个随机的key
- TYPE key获取key的存储类型
127.0.0.1:6379> get name
"duanjiaqi"
127.0.0.1:6379> type name
string
Strings 指令
Strings数据类型是R最基本的数据类型,一个string的value最多可以是512m。
Strings的数据结构是动态字符串(SDS),其value值是可以修改的。采用预分配冗余空间的操作来减少内存频繁分配;
当字符串长度小于等于m时,扩容为加倍现有的空间;如果超过了1m时,扩容一次最多只扩容1m的空间,即使再扩容,一个value最多也是512m;
单个键值对操作
-
SET key value设置key的值
如果key 不存在则新增,存在则修改key的值 -
GET key 返回key的value
如果key不存在,返回特殊值(nil)。 -
DEL key 删除指定的key(key可以是多个)
127.0.0.1:6379> set name hahha
OK
127.0.0.1:6379> get name
"hahha"
127.0.0.1:6379> set name hahhah123
OK
127.0.0.1:6379> get name
"hahhah123"
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> get name
(nil)
批量键值对操作
批量键值读取和写入最大的优势在于节省网络传输开销
- MSET key value [key value] 设置多个key value
- MGET key [key …] 获取所有key的值
127.0.0.1:6379> mset name hahha age 14 sex 1
OK
127.0.0.1:6379> mget name
1) "hahha"
127.0.0.1:6379> mget age
1) "14"
127.0.0.1:6379> mget sex
1) "1"
127.0.0.1:6379> mget name age sex
1) "hahha"
2) "14"
3) "1"
- MSETNX key value [key value …]设置多个key value,仅当key存在时,必须是后面的key同时设置成功才可。如果有任何一个key设置失败,则整个命令失败
127.0.0.1:6379> msetnx age 1 name duanjiaqi
(integer) 1
127.0.0.1:6379> mget age name
1) "1"
2) "duanjiaqi"
设置过期时间
过期set是通过设置一个缓存key的过期时间,使得缓存到期后自动删除从而失效的机制
- EXPIRE key seconds
127.0.0.1:6379> set name hahha
OK
127.0.0.1:6379> get name
"hahha"
127.0.0.1:6379> expire name 10
(integer) 1
127.0.0.1:6379> get name
"hahha"
127.0.0.1:6379> get name
"hahha"
127.0.0.1:6379> get name
(nil)
- setex key seconds value 设置key-value 并设置过期时间,以秒为单位
- psetex key milliseconds value 设置一个值得过期时间,以毫秒为单位
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> setex name 10 hahha
OK
127.0.0.1:6379> get name
"hahha"
127.0.0.1:6379> get name
(nil)
- SETNX key value 给key不存在则创建,存在则不更新 与set相反
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> setnx name hahhahha
(integer) 1
127.0.0.1:6379> get name
"hahhahha"
127.0.0.1:6379> setnx name duanjiaqi //此时name值已设置,重新设置则失败
(integer) 0
127.0.0.1:6379> get name
"hahhahha"
计数器
- INCR key 原子加1操作
原子性:不会被线程调度机制打断的机制;
127.0.0.1:6379> set age 14
OK
127.0.0.1:6379> incr age
(integer) 15
- INCRBY key increment 执行原子增加一个整数
127.0.0.1:6379> set age 14
OK
127.0.0.1:6379> incr age
(integer) 15
127.0.0.1:6379> incrby age 20
(integer) 35
- INCRBYFLOAT key increment 执行原子增加一个浮点数
127.0.0.1:6379> get age
"5"
127.0.0.1:6379> incrby age 0.5
(error) ERR value is not an integer or out of range
127.0.0.1:6379> incrbyfloat age 0.5
"5.5"
- DECR key 整数原子减1
127.0.0.1:6379> get age
(nil)
127.0.0.1:6379> decr age //如果key不存在,那么在操作之前,这个key对应的值为0
(integer) -1
127.0.0.1:6379> set age 10
OK
127.0.0.1:6379> decr age
(integer) 9
127.0.0.1:6379> set age "1232232"
OK
127.0.0.1:6379> get age
"1232232"
127.0.0.1:6379> decr age
(integer) 1232231
127.0.0.1:6379> decr age
(integer) 1232230
- DECRBY key decrement 原子减指定的整数
127.0.0.1:6379> set age 10
OK
127.0.0.1:6379> decrby age 5
(integer) 5
127.0.0.1:6379> get age
"5"
- APPEND key value追加一个值到key上
127.0.0.1:6379> set age 1
OK
127.0.0.1:6379> append age 2
(integer) 2
127.0.0.1:6379> get age
"12"
127.0.0.1:6379> set name duanjiaqi
OK
127.0.0.1:6379> get name
"duanjiaqi"
127.0.0.1:6379> append name 123
(integer) 12
127.0.0.1:6379> get name
"duanjiaqi123"
- SETRANGE key offset value 覆盖key对应的string的一部分,从指定的offset开始,覆盖value的长度。
127.0.0.1:6379> get name
"duanjaiqi"
127.0.0.1:6379> setrange name 4 qiqi
(integer) 9
127.0.0.1:6379> get name
"duanqiqii"
- GETRANGE key start end获取存储在key上的值得一个字字符串
127.0.0.1:6379> set name duanjiaqi
OK
127.0.0.1:6379> getrange name 0 1
"du"
127.0.0.1:6379> getrange name 0 0
"d"
127.0.0.1:6379> getrange name -1 -3
""
127.0.0.1:6379> getrange name -3 -1
"aqi"
- GETSET key value 设置一个key的新的value值,并返回旧的value
127.0.0.1:6379> get name
"duanjiaqi"
127.0.0.1:6379> getset name hahha
"duanjiaqi"
127.0.0.1:6379> get name
"hahha"
应用场景:
GETSET可以和INCR一起使用实现支持重置的计数功能。举例:每当有事件发生的时候,一段程序都会调用INCR给key加1,但是有时候我们需要获取计数器的值,并且自动将其设置为0。
- STRLEN key 获取指定key值的长度
127.0.0.1:6379> get name
"duanqiqii"
127.0.0.1:6379> strlen name
(integer) 9
- 统计字符串指定起始位置的字节数
BITCOUNT key [start end]
Hashes 指令
哈希集中指定字段
- HSET key field value 设置hash里面一个字段的值
127.0.0.1:6379> hset friend name liu
(integer) 1
127.0.0.1:6379> hget friend name
"liu"
- HGET key field 获取hash中field值
127.0.0.1:6379> hget introduce name
"duanjaiqi"
127.0.0.1:6379> hget introduce age
"12"
- HDEL key field [field …] 删除一个或多个Hash的field
127.0.0.1:6379> hset myhash field1 "foo"
(integer) 1
127.0.0.1:6379> hget myhash field1
"foo"
127.0.0.1:6379> hdel myhash field1
(integer) 1
127.0.0.1:6379> hget myhash field1
(nil)
- HGETALL key从hash中读取全部的域和值
。返回值中,每个字段名的下一个是它的值,所以返回值的长度是哈希集大小的两倍。
127.0.0.1:6379> hgetall introduce
1) "name"
2) "duanjaiqi"
3) "age"
4) "12"
5) "sex"
6) "1"
- HKEYS key 获取hash的所有字段
127.0.0.1:6379> hkeys introduce
1) "name"
2) "age"
3) "sex"
127.0.0.1:6379> hgetall introduce
1) "name"
2) "duanjaiqi"
3) "age"
4) "27"
5) "sex"
6) "1"
HEYS 和 HGETALL 的区别:HKEYS只拿到key,而hgetall则键值都拿到
- HVALS key 获得hash的所有值
HGETALL和HKEYS 和HVALS 区别
127.0.0.1:6379> hgetall introduce
1) "name"
2) "hhaha"
3) "age"
4) "12"
5) "sex"
6) "1"
127.0.0.1:6379> hkeys introduce
1) "name"
2) "age"
3) "sex"
127.0.0.1:6379> hvals introduce
1) "hhaha"
2) "12"
3) "1"
- HLEN key获取hash里所有字段的数量
127.0.0.1:6379> hlen introduce
(integer) 3
127.0.0.1:6379> hgetall introduce
1) "name"
2) "duanjaiqi"
3) "age"
4) "27"
5) "sex"
6) "1"
127.0.0.1:6379> hlen introduce
(integer) 3
127.0.0.1:6379> hkeys introduce
1) "name"
2) "age"
3) "sex"
- HEXISTS key field 判断field是否存在于hash中
127.0.0.1:6379> hset introduce name "duanjiaqi"
(integer) 1
127.0.0.1:6379> hexists introduce name
(integer) 1
127.0.0.1:6379> hmset introduce name "duanjaiqi" age 12 sex 1
OK
127.0.0.1:6379> hexists introduce age
(integer) 1
127.0.0.1:6379> hexists introduce address
(integer) 0
- HINCRBY key field increment 将hash中指定域的值增加给定的数字
127.0.0.1:6379> hget introduce age
"12"
127.0.0.1:6379> hincrby introduce age 1
(integer) 13
127.0.0.1:6379> hincrby introduce age 13
(integer) 26
- HINCRBYFLOAT key field increment 将hash中指定域的值增加给定的浮点数
127.0.0.1:6379> hincrby introduce age 13
(integer) 26
127.0.0.1:6379> hincrbyfloat introduce age 0.5
"26.5"
127.0.0.1:6379> hincrbyfloat introduce age 0.5
"27"
- HMGET key field [field …]获取hash里面面指定字段的值
127.0.0.1:6379> hgetall introduce
1) "name"
2) "duanjaiqi"
3) "age"
4) "27"
5) "sex"
6) "1"
127.0.0.1:6379> hmget introduce name age
1) "duanjaiqi"
2) "27"
- HMSET key field value [field value…]设置hash字段值
127.0.0.1:6379> hmset introduce name hhaha age 12
OK
127.0.0.1:6379> hmget introduce name age
1) "hhaha"
2) "12"
- HSETNX key field value 设置hash的一个字段,只有当这个字段不存在时有效。
同一哈希集中的同一个字段,后设置的值不会替换前面设置的值
127.0.0.1:6379> hsetnx friend age 1
(integer) 1
127.0.0.1:6379> hsetnx friend age 2
(integer) 0
127.0.0.1:6379> hget friend age
"1"
- HSTRLEN key field 获取hash里面指定field的长度
127.0.0.1:6379> hgetall introduce
1) "name"
2) "hhaha"
3) "age"
4) "12"
5) "sex"
6) "1"
127.0.0.1:6379> hstrlen introduce name
(integer) 5
127.0.0.1:6379> hstrlen introduce age
(integer) 2
Sets指令
- SADD key member [member …] 添加一个或者多个元素到集合里。
如果已经在集合中的则忽略,意思就是sadd里面的元素是唯一的。
127.0.0.1:6379> sadd name "daunjaiqi"
(integer) 1
127.0.0.1:6379> sadd name "qiqi"
(integer) 1
127.0.0.1:6379> sadd name "qiqi"
(integer) 0
127.0.0.1:6379> smembers name
1) "daunjaiqi"
2) "qiqi"
- SREM key member [member …]从集合里删除一个或多个元素
127.0.0.1:6379> smembers name2
1) "hahha"
2) "duanjiaqi"
3) "hahha1"
4) "hahha3"
127.0.0.1:6379> srem name2 hahha
(integer) 1
127.0.0.1:6379> smembers name2
1) "duanjiaqi"
2) "hahha1"
3) "hahha3"
- SCARD key 获取集合里面元素数量
127.0.0.1:6379> smembers name
1) "daunjaiqi"
2) "qiqi"
127.0.0.1:6379> scard name
(integer) 2
- SDIFF key [key …]获得队列中不存在的元素,返回一个集合与给定集合的差集的元素
127.0.0.1:6379> smembers name
1) "qiqi"
2) "duanjiaqi"
127.0.0.1:6379> smembers name2
1) "duanlusha"
2) "duanjiaqi"
127.0.0.1:6379> sdiff name name2 //返回name集合中与name2中不同的元素
1) "qiqi"
- SDIFFSTORE denstination key [key…]获得队列不存在的元素,并存储在一个关键的结果集
127.0.0.1:6379> smembers name
1) "qiqi"
2) "duanjiaqi"
127.0.0.1:6379> smembers name2
1) "duanlusha"
2) "duanjiaqi"
127.0.0.1:6379> sdiff name name2
1) "qiqi"
127.0.0.1:6379> sdiffstore name_diff name name2
(integer) 1
127.0.0.1:6379> smembers name_diff //将name与name2集合做对比,将最后的不同的结果存储在name_diff中
1) "qiqi"
- SUNION key [key…]返回给定的多个集合的并集中的所有成员
127.0.0.1:6379> smembers name
1) "duanjiaqi"
127.0.0.1:6379> smembers name2
1) "duanjiaqi"
2) "hahha1"
3) "hahha3"
127.0.0.1:6379> sunion name name2
1) "hahha1"
2) "duanjiaqi"
3) "hahha3"
- SUNIONSTORE destination key [key…]合并set元素,并将结果存入新的set里面
127.0.0.1:6379> smembers name
1) "duanjiaqi"
127.0.0.1:6379> smembers name2
1) "duanjiaqi"
2) "hahha1"
3) "hahha3"
127.0.0.1:6379> sunion name name2
1) "hahha1"
2) "duanjiaqi"
3) "hahha3"
127.0.0.1:6379> sunionstore name_union name name2
(integer) 3
127.0.0.1:6379> smembers name_union
1) "hahha1"
2) "duanjiaqi"
3) "hahha3"
- SINTER key [key …]获得两个集合的交集
127.0.0.1:6379> smembers name
1) "qiqi"
2) "duanjiaqi"
127.0.0.1:6379> smembers name2
1) "duanlusha"
2) "duanjiaqi"
127.0.0.1:6379> sinter name name2
1) "duanjiaqi"
- SINTERSTORE denstinatiion key [key …]获得两个集合的交集,并存储在一个关键的结果集
127.0.0.1:6379> smembers name
1) "qiqi"
2) "duanjiaqi"
127.0.0.1:6379> smembers name2
1) "duanlusha"
2) "duanjiaqi"
127.0.0.1:6379> sinterstore name_join name name2
(integer) 1
127.0.0.1:6379> smembers name_join
1) "duanjiaqi"
- SISMEMBER key member 确定一个给定的值是一个集合的成员,【判断一个值是否在这个集合中】
127.0.0.1:6379> smembers name2
1) "duanlusha"
2) "duanjiaqi"
127.0.0.1:6379> sismember name2 qiqi
(integer) 0
127.0.0.1:6379> sismember name2 duanjiaqi
(integer) 1
- SMEMBERS key获取集合里面的所有元素
127.0.0.1:6379> smembers name2
1) "duanlusha"
2) "duanjiaqi"
- SMOVE source destination member移动集合里面的一个元素到另一个集合【移动source集合中的member元素到denstincation中】
127.0.0.1:6379> smembers name
1) "qiqi"
2) "duanjiaqi"
127.0.0.1:6379> smembers name2
1) "duanlusha"
2) "duanjiaqi"
127.0.0.1:6379> smove name name2 qiqi
(integer) 1
127.0.0.1:6379> smembers name
1) "duanjiaqi"
127.0.0.1:6379> smembers name2
1) "qiqi"
2) "duanlusha"
3) "duanjiaqi"
- SPOP key [count]删除并获取一个集合里面的元素【在集合中移除一个或者多个随机元素并将移除的元素返回】
127.0.0.1:6379> smembers name2
1) "duanlusha"
2) "hahha1"
3) "duanjiaqi"
4) "hahha"
5) "hahha3"
6) "hahha2"
127.0.0.1:6379> spop name2 2
1) "hahha2"
2) "duanlusha"
127.0.0.1:6379> smembers name2
1) "hahha"
2) "duanjiaqi"
3) "hahha1"
4) "hahha3"
- SRANDMEMBER key [count]从集合里面随机获取一个或多个元素
127.0.0.1:6379> srandmember name2
"duanjiaqi"
127.0.0.1:6379> srandmember name2 2
1) "hahha"
2) "duanjiaqi"
127.0.0.1:6379> srandmember name2 3
1) "hahha"
2) "duanjiaqi"
3) "hahha3"
Sorted Sets 指令
有序集合不允许存在重复的成员
有序集合按照分数以递增的方式进行排序
- ZADD key score member [score member]添加到有序集合的一个或者多个成员,或者修改一个成员的分数
127.0.0.1:6379> zadd order_number 1 duan
(integer) 1
127.0.0.1:6379> zadd order_number 4 liu
(integer) 1
127.0.0.1:6379> zadd order_number 0 wang
(integer) 1
127.0.0.1:6379> zrange order_number 0 -1 withscores
1) "wang"
2) "0"
3) "duan"
4) "1"
5) "liu"
6) "4"
127.0.0.1:6379> zadd order_number 6 duan
(integer) 0
127.0.0.1:6379> zrange order_number 0 -1 withscores
1) "wang"
2) "0"
3) "liu"
4) "4"
5) "duan"
6) "6"
- ZREM key member [member…] 从排序的集合中删除一个或多个成员
127.0.0.1:6379> zrange order_number 0 -1 withscores
1) "wang"
2) "0"
3) "liu"
4) "4"
5) "duan"
6) "16"
127.0.0.1:6379> zrem order_number wang
(integer) 1
127.0.0.1:6379> zrange order_number 0 -1 withscores
1) "liu"
2) "4"
3) "duan"
4) "16"
- ZCARD key获取一个排序的集合中的成员数量
127.0.0.1:6379> zrange order_number 0 -1
1) "wang"
2) "liu"
3) "duan"
127.0.0.1:6379> zrange order_number 0 -1 withscores
1) "wang"
2) "0"
3) "liu"
4) "4"
5) "duan"
6) "6"
127.0.0.1:6379> zcard order_number
(integer) 3
- ZCOUNT key min max返回分数范围内的成员数量
127.0.0.1:6379> zrange order_number 0 -1 withscores
1) "wang"
2) "0"
3) "liu"
4) "4"
5) "duan"
6) "6"
127.0.0.1:6379> zcount order_number 0 4
(integer) 2
127.0.0.1:6379> zcount order_number 0 6
(integer) 3
- ZINCRBY key increment member 为有序集合key的成员member的score值加上增加increment
127.0.0.1:6379> zrange order_number 0 -1 withscores
1) "wang"
2) "0"
3) "liu"
4) "4"
5) "duan"
6) "6"
127.0.0.1:6379> zincrby order_number 10 duan
"16"
127.0.0.1:6379> zrange order_number 0 -1 withscores
1) "wang"
2) "0"
3) "liu"
4) "4"
5) "duan"
6) "16"
- ZINTERSTORE destincation numkeys key[key …]计算给定的numkeys个有序集合的交集,并且把结果放到destination中。
127.0.0.1:6379> zrange order_number 0 -1 withscores
1) "liu"
2) "4"
3) "duan"
4) "16"
127.0.0.1:6379> zrange order_number2 0 -1 withscores
1) "duan"
2) "1"
127.0.0.1:6379> zinterstore order_join 2 order_number order_number2
(integer) 1
127.0.0.1:6379> zrange order_join 0 -1 withscores
1) "duan"
2) "17"
- ZLEXCOUNT key min max 返回成员之间的成员数量
1、成员名称前需要加 [ 符号作为开头,[ 符号与成员之间不能有空格
2、计算成员之间的成员数量时,参数min和max的位置也计算在内。
127.0.0.1:6379> zadd numbers 1 a 2 b 3 c 4 d 5 e 6 f 7 g
(integer) 7
127.0.0.1:6379> zrange numbers 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
7) "g"
127.0.0.1:6379> zlexcount numbers [c +
(integer) 5
127.0.0.1:6379> zlexcount numbers [f [c
(integer) 0
- ZPOPMAX key [count] 删除并返回有序集合key中的最多count个具有最高得分的成员
- ZPOPMIN key [count]删除并返回有序集合key中最多的count个具有最低得分的成员
127.0.0.1:6379> zadd number 1 duan 3 wagn 7 liu
(integer) 3
127.0.0.1:6379> zpopmin number
1) "duan"
2) "1"
127.0.0.1:6379> zpopmax number
1) "liu"
2) "7"
- ZRANGE key start stop 根据指定的index返回,返回有序集合的成员列表
127.0.0.1:6379> zrange number 0 -1
1) "duan"
2) "wagn"
3) "wang"
4) "liu"
127.0.0.1:6379> zrange number 2 -1
1) "wang"
2) "liu"
127.0.0.1:6379> zrange number 1 1
1) "wagn"
- ZRANK key member 返回有序集合key中成员member的排名 ,按score从小到大,第一个为0 .
- ZREVRANK key member 按score从大到小。
127.0.0.1:6379> zrange number 0 -1 withscores
1) "duan"
2) "1"
3) "wagn"
4) "3"
5) "wang"
6) "3"
7) "liu"
8) "7"
127.0.0.1:6379> zrank number wagn
(integer) 1
127.0.0.1:6379> zrank number duan
(integer) 0
127.0.0.1:6379> zrevrank number liu
(integer) 0
127.0.0.1:6379> zrevrank number wang
(integer) 1
- ZRANGEBYLEX key min max 返回指定成员区间内的成员,按字典正序排列,分数必须相同。
- ZREVRANGEBYLEX key max min 返回指定成员区间内的成员,按字典倒序排列,分数必须相同。
LISTS指令
list单键多值;可以添加一个元素到列表的头部和尾部
list底层数据结构为双向链表,可以通过头部和找下一个元素能找到尾部,也可以通过尾部和下一个元素能找到头部;
- 列表元素很少的情况下会使用一块连续的内存来进行存储,ziplist压缩列表;
- 如果数据量很大的情况下,就会讲ziplist用链表形式连接起来,形成quicklist快速链表;普通的链表需要附加指针空间太大会浪费一定的空间;
- LPUSH key value [value] 从队列的左边入队一个或多个元素
- RPUSH key value [value] 从队列的尾部插入所有指定的值。
127.0.0.1:6379> lpush name duanjiaqi
(integer) 1
127.0.0.1:6379> lpush name wang
(integer) 2
127.0.0.1:6379> lpush name liu
(integer) 3
127.0.0.1:6379> lrange name 0 -1
1) "liu"
2) "wang"
3) "duanjiaqi"
127.0.0.1:6379> rpush name haha
(integer) 4
127.0.0.1:6379> lrange name 0 -1
1) "liu"
2) "wang"
3) "duanjiaqi"
4) "haha"
- LPOP key 移除并且返回key对应的list的第一个元素
- RPOP key 移除并返回存于key的list的最后一个元素
127.0.0.1:6379> lrange introduce 0 -1
1) "wang"
2) "liu"
3) "hahha123232"
4) "hahahahahah"
5) "duanjiaqi"
127.0.0.1:6379> lpop introduce
"wang"
127.0.0.1:6379> lrange introduce 0 -1
1) "liu"
2) "hahha123232"
3) "hahahahahah"
4) "duanjiaqi"
127.0.0.1:6379> rpop introduce
"duanjiaqi"
127.0.0.1:6379> lrange introduce 0 -1
1) "liu"
2) "hahha123232"
3) "hahahahahah"
- LRANGE key start stop 返回存储在key的列表里指定范围内的元素。start和end偏移量都是基于0的下标。
127.0.0.1:6379> lrange introduce 0 -1
1) "hahha45"
2) "hahha123232"
3) "liu"
4) "wang"
5) "duanjiaqi"
- LREM key count value从列表中移除前count次出现的值为value的元素
count > 0 :从头到尾移除值为value的元素;
count < 0 :从尾到头移除值为value的元素;
count = 0 :移除所有值为value的元素;
127.0.0.1:6379> lrange introduce 0 -1
1) "wang"
2) "wang"
3) "wang"
4) "hahha45"
5) "hahha123232"
6) "liu"
7) "wang"
8) "duanjiaqi"
127.0.0.1:6379> lrem introduce 1 wang
(integer) 1
127.0.0.1:6379> lrange introduce 0 -1
1) "wang"
2) "wang"
3) "hahha45"
4) "hahha123232"
5) "liu"
6) "wang"
7) "duanjiaqi"
127.0.0.1:6379> lrem introduce -2 wang
(integer) 2
127.0.0.1:6379> lrange introduce 0 -1
1) "wang"
2) "hahha45"
3) "hahha123232"
4) "liu"
5) "duanjiaqi"
- LLEN key 返回存储在key里的list的长度
127.0.0.1:6379> lrange introduce 0 -1
1) "wang"
2) "hahha45"
3) "hahha123232"
4) "liu"
5) "duanjiaqi"
127.0.0.1:6379> llen introduce
(integer) 5
- LSET key index value 设置队列里面一个元素的值
127.0.0.1:6379> lrange introduce 0 -1
1) "wang"
2) "hahha45"
3) "hahha123232"
4) "liu"
5) "duanjiaqi"
127.0.0.1:6379> lset introduce -2 hahahahahah
OK
127.0.0.1:6379> lrange introduce 0 -1
1) "wang"
2) "hahha45"
3) "hahha123232"
4) "hahahahahah"
5) "duanjiaqi"
127.0.0.1:6379> lset introduce 1 liu
OK
127.0.0.1:6379> lrange introduce 0 -1
1) "wang"
2) "liu"
3) "hahha123232"
4) "hahahahahah"
5) "duanjiaqi"
- LINDEX key index 返回列表里的元素的索引index存储在key里面。下标是同0开始。
127.0.0.1:6379> lpush introduce duanjiaqi
(integer) 1
127.0.0.1:6379> lpush introduce wang
(integer) 2
127.0.0.1:6379> lpush introduce liu
(integer) 3
127.0.0.1:6379> lindex introduce 2
"duanjiaqi"
127.0.0.1:6379> lrange introduce 0 -1
1) "liu"
2) "wang"
3) "duanjiaqi"
127.0.0.1:6379> lindex introduce 2
"duanjiaqi"
- LINSERT key BEFORE|AFTER pivot value 当value插入存于key的列表中在基准值pivot的前面或者后面。
127.0.0.1:6379> lrange introduce 0 -1
1) "liu"
2) "wangyang"
3) "wang"
4) "duanjiaqi"
127.0.0.1:6379> linsert introduce after "wang" wangyang
(integer) 5
127.0.0.1:6379> lrange introduce 0 -1
1) "liu"
2) "wangyang"
3) "wang"
4) "wangyang"
5) "duanjiaqi"
127.0.0.1:6379> linsert introduce after "duanjiaqi" "hahha"
(integer) 6
127.0.0.1:6379> lrange introduce 0 -1
1) "liu"
2) "wangyang"
3) "wang"
4) "wangyang"
5) "duanjiaqi"
- BLPOP key [key …] timeout 删除并获得该列表中的第一元素。从头部弹出。
- BRPOP key [key …] timeout 删除并获得该列表的最后一个元素。从尾部弹出。
非阻塞行为:如果给定key内至少有一个非空列表,那么弹出遇到的第一个非空列表的头元素,并和被弹出元素所属的列表的key一起组成结果返回给调用者。
当存在多个给定key时,BLPOP按给定key参数排列的先后顺序,依次检查各个列表。
127.0.0.1:6379> lpush list2 wang duan liu
(integer) 3
127.0.0.1:6379> lrange list2 0 -1
1) "liu"
2) "duan"
3) "wang"
127.0.0.1:6379> blpop list1 list2 list3 0//list 1和list3没有这个key
1) "list2"
2) "liu"
阻塞行为:如果所有给定key都不存在或者包含空列表,那么BLPOP命令将阻塞链接,直到有另一个客户端对给定的这些key的任意一个执行PUSH操作为止。一旦有新的数据揣想那在其中一个列表中,那么这个命令会解除阻塞状态,并且返回key和元素值。
当BLPOP命令引起客户端阻塞并且设置了一个非零的超市参数timeout的时候,若经过了指定的timeout扔没有出现一个针对特定key的push操作,则客户端会解除阻塞状态并且返回一个nil的多组合值。
127.0.0.1:6379> blpop list1 list2 list3 0
//此时无返回结果;
//在另一个客户端执行:
127.0.0.1:6379> lpush list2 duan wang
//而此时第一个命令结果返回:
127.0.0.1:6379> blpop list1 list2 list3 0
1) "list2"
2) "wang"
(77.04s)//时隔77.04S返回结果,也就是第一个命令阻塞了77秒
(integer) 2
timeout参数表示的是一个指定则色的最大描述的整型值。当timeout为0时表示阻塞时间无限制。
当客户端为多个key尝试阻塞的时候,若至少存在一个key拥有元素,那么返回的键值对就是从左到右第一个拥有一个或多个元素的key。
当多个客户端为同一个key阻塞的时候,第一个被处理的客户端是等待时间最长的那个,也就是第一个因为key而阻塞的客户端。
在执行完每个命令之后,Redis会把一个所有key都获得数据并且至少使一个客户端阻塞了的list运行一次。这个list按照新数据的接收时间进行整理,即使从第一个接受数据的key到最后一个。在处理每个key的时候,只要这个key里有元素,Reis就会对所有等待这个key的客户端按照“先进先出”的顺序进行服务。若这个key是空的,或者没有客户端在等待这个key,那么将会去处理下一个从之前的命令或事务获得新数据的key。
- RPOPLPUSH source destination 返回并移除存储在source的列表的最后一个元素,并将该元素放在destination列表的第一个元素位置。
127.0.0.1:6379> lpush list1 duan wang hah
(integer) 3
127.0.0.1:6379> lrange list1 0 -1
1) "hah"
2) "wang"
3) "duan"
127.0.0.1:6379> lpush list2 liu fan
(integer) 2
127.0.0.1:6379> lrange list2 0 -1
1) "fan"
2) "liu"
127.0.0.1:6379> rpoplpush list1 list2
"duan"
127.0.0.1:6379> lrange list1 0 -1
1) "hah"
2) "wang"
127.0.0.1:6379> lrange list2 0 -1
1) "duan"
2) "fan"
3) "liu"
-
BRPOPLPUSH source destination timeout
是BPOPLPUSH的阻塞版本,当source是空的时候,redis会阻塞这个链接,直到另一个客户端push元素进入或者达到timeout时限,才可以解除阻塞。 -
LPUSHX key value 当key已经存在时,在这个key下面的list的头部插入value,当key不存在时,不进行任何操作
-
RPUSHX key value将值插入到key列表的尾部,如果key不存在,也不进行任何操作.
127.0.0.1:6379> lpush list1 duan
(integer) 1
127.0.0.1:6379> lpushx list1 hahah
(integer) 2
127.0.0.1:6379> lrange list1 0 -1
1) "hahah"
2) "duan"
127.0.0.1:6379> lpushx list2 hhahahha
(integer) 0
Connection 指令
- AUTH password 验证服务器密码
为redis服务请求设置一个密码。redis可以设置在客户端执行commands请求前需要通过密码验证。 - PING Ping服务器 用来测试链接是否可用
127.0.0.1:6379> ping
PONG
- QUIT 关闭链接,退出
- select index 选择新的数据库 ,选择一个数据库,下标值从0开始,一个新链接默认连接的数据库是DB0;
- SWAPDB index index 该命令可以交换同一Redis服务器 上的两个DATABASE,可以实现连接某一数据库的链接立即访问到其他DATABASE的数据。访问交换前其他database的连接也可以访问到该DATABASE的数据。
127.0.0.1:6379>swap 0 1 //交换database 0 1.所有访问0号数据库的链接可以立即访问到1号数据库的数据。
Geo指令
- GEOADD key longitude latitude member[longitude latitude member …] 将指定的地理空间位置(经度,纬度,名称)添加到指定的key中。
- GEOHASH key member [member…] 返回一个标准的地理空间的Geohash字符串。
Geohash:11个字符的Geohash字符串,没有精度Geohash
-
GEOPOS key member [member…]返回地理空间的经纬度
-
GEODIST key member1 member2 unit 返回两个地理空间之间的距离。[unit:m:米(默认);km:千米;mi:英里;ft:英尺]
如果两个位置之间的其中一个不存在,那么命令返回空值。 -
GEORADIUS key longitude latitude radius unit WITHDIST|WITHCOORD|WITHHASH 以给定的经纬度为中心,返回键包含的位置元素中与中心距离不超过给定最大距离的所有位置元素。
中心点是由输入的经度和维度来决定中心点的。 -
GEORADIUSBYMEMBER key member radius unit WITHCOORD|WITHDIST|WITHHASH 查询指定半径内匹配到的最大距离的一个地理空间元素。中心店是由给定的位置决定的。
127.0.0.1:6379> geoadd sicily 12.361398 28.115556 "palermo"
(integer) 1
127.0.0.1:6379> geoadd sicily 15.087269 37.502669 "catania"
(integer) 1
127.0.0.1:6379> geohash sicily catania
1) "sqdtr74hyu0"
127.0.0.1:6379> geohash sicily palermo
1) "skbzcq32cr0"
127.0.0.1:6379> geopos sicily catania
1) 1) "15.08726745843887329"
2) "37.50266842333162032"
127.0.0.1:6379> geodist sicily palermo catania
"1074586.6501"
127.0.0.1:6379> georadius sicily 15 37 200 km withcoord
1) 1) "catania"
2) 1) "15.08726745843887329"
2) "37.50266842333162032"
127.0.0.1:6379> georadiusbymember sicily palermo 20 km
1) "palermo"
HyperLogLog指令
用处:用来做基数(不重复元素)统计的算法;会返回数量;
优点:在输入元素的数量或者体积非常大时,计算基数所需的空间总是固定的并且很小;
缺点:HyperLogLog只会根据输入元素来计算基数,而不会存储输入元素本身,所以HyperLogLog不能像集合那样,返回输入的各个元素;
- PFADD key element [element…]将除了第一个参数以外的参数存储到以第一个参数为变量名的HyperLogLog结构中
- PFCOUNT key [key…]当参数为一个key时,返回存储在HyperLogLog结构体的该比那辆的数量,如果该变量不存在,则返回0;
当参数为多个key时,返回这些HyperLogLog并集的基数。 - PFMERGE destkey sourcekey [sourcekey…] 将多个HyperLogLog合并为一个HyperLogLog,合并后的HyperLogLog的基数接近于所有输入HyperLogLog的可见集合的并集。合并得出的HyperLogLog会被储存在第一个参数里面。
127.0.0.1:6379> pfadd name duanjiaqi qiqi
(integer) 1
127.0.0.1:6379> pfcount name
(integer) 2
127.0.0.1:6379> pfadd other_name xiaoxiao laoer
(integer) 1
127.0.0.1:6379> pfcount other_name
(integer) 2
127.0.0.1:6379> pfcount name other_name
(integer) 4
127.0.0.1:6379> pfmerge total_name name other_name
OK
127.0.0.1:6379> pfcount total_name
(integer) 4
Transactions指令
- DISCARD 丢弃所有MULTI之后发的命令,刷新一个事务中所有在排队等待的指令,并且将连接状态恢复到正常。
- EXEC 执行所有MULTI之后发的命令。执行事务中所有在排队等待的指令并将连接状态恢复到正常,当使用WATCH时,只有当被监视的键没有被修改且允许检查设定机制时,EXEC会被执行
- MULTI标记一个事务块开始。后面的指令将在执行EXEC时作为一个原子执行。
- UNWATCH 取消事务命令。如果执行EXEC或者DISCARD,则不需要手动执行UNWATCH。
- WATCH key[key…]标记所有指定的key被监视起来,在事务中有条件的执行(乐观锁)
Server指令
- BGREWRITEAOF 异步重写追加文件命令。
AOF重写由Redis自行触发,BGREWRITEAOF仅仅用于手动触发重写操作。 - BGSAVE 异步保存数据集到磁盘上
后台保存DB,会立即返回OK状态码。Redis forks,父进程继续提供服务以供客户端调用,子进程将DB数据保存到磁盘然后退出。如果操作成功,可以通过客户端命令LASTSAVE来检查操作结果。 - SAVE 同步数据到磁盘上
- CLIENT KILL 关闭一个指定的连接。
- CLIENT LIST 用于返回所有连接到服务器的客户端信息和统计数据。
127.0.0.1:6379> client list
id=34 addr=127.0.0.1:43482 fd=7 name= age=7 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 obl=0 oll=0 omem=0 events=r cmd=client
- CLIENT GETNAME 获得当前连接名称
- CLIENT ID 返回当前连接的id,id永不重复,单调递增
- CLIENT PAUSE timeout 暂停处理客户端命令,可以将所有客户端的访问暂停给定的毫秒数。
- CLIENT REPLY ON|OFF|SKIP (ON:默认,回复客户端每条命令;OFF:不回复客户端命令;SKIP:跳过该命令的回复) 当需要完全禁用redis服务器对当前客户端的回复时可使用该命令
- CLIENT SETNAME connection-name:为当前连接分配一个名字。client getname可以获取到这个名字
- CLIENT UNBLOCK client-id timeout|error 当客户端因为执行具有阻塞功能的明林如BRPOP,或者WAIT被阻塞时,该命令可以通过其他连接解除客户端的阻塞。
- CONFIG GET 用来读取redis服务器的配置文件参数,但并不是所有参数都支持。
- CONFIG SET用来设置服务器的配置参数。
- CONFIG REWRITE 从内存中获得配置文件
- DBSIZE 返回当前数据库里keys数量
- FLUSHALL 清空所有数据库命令
- FLUSHDB 清空当前的数据库命令
- INFO 获得服务器的详细信息
- SYNC 用于复制的内部命令
- SLOWLOG subcommand [argument]用于读取和重置redis慢查询日志。
- SLOWLOG GET 读取慢查询日志。需要最新版才能读取慢查询日志的输出,使用了以前未在redis-cli中实现的协议(深层嵌套的多批量回复)。
- SLOWLOG LEN 获得慢查询日志的长度
- SLOWLOG RESET重置慢查询日志,删除后,信息永远丢失
Cluster指令【集群】
- CLUSTER ADDSLOTS slot [slot …]用于修改某个节点上的集群配置。具体的说它把hash slots(哈希槽) 分配给接受命令的节点。如果命令执行成功,节点将指定的hash slots映射到自身,节点将获得指定的hash slots,同时开始向集群广播新的配置。
该命令只有当所有指定的slots在接受命令的节点上还没有分配的情况下生效。节点将拒绝接纳已经分配到其他节点的slots(包括他自己的);
同一个slot被指定多次的情况下命令会失败。
执行这个命令有一个副作用,如果slot作为其中一个参数设置为importing,一旦节点向自己分配该slot(以前未绑定)这个状态会被清除。
Pub/Sub指令
- PUBLISH channel message 将信息message发送到指定的channel频道;
- SUBSCRIBE channel [channel] 订阅一个或者多个频道发布的消息
- UNSUBSCRIBE channel 停止监听频道
- PSUBSCRIBE pattern [pattern…] 订阅给定的模式,匹配订阅给定的模式
- PUNSUBSCRIBE pattern [pattern…] 停止发布到匹配给定模式的频道信息
- PUBSUB channels [pattern] 列出当前频道
PUBSUB NUMSUB 列出指定信道的订阅者个数
PUBSUB NUMPAT 返回订阅模式的数量,这个命令返回的不是订阅模式的客户端的数量,而是客户单订阅的所有模式的数量之和;