二、redis 各类型key基本操作

参考 redis基本操作

一、使用redis-cli客户端可以登录到redis服务器

redis-cli #可以使用-h来指定主机,-p来指定端口。默认登录127.0.0.1的6379端口。

redis-cli -h 127.0.0.1 -p 6379

exit #退出当前会话(ctrl+d)
shutdown #关闭redis服务器,命令不区分大小写
在这里插入图片描述

二、redis字符串操作

1、设置指定key的值

命令:set
格式:set key value

127.0.0.1:6379> set name wangxiaoyu
OK

2、获取指定key的值

命令:get
格式:get key

127.0.0.1:6379> get name
"wangxiaoyu"

3、对 key 所储存的字符串值,获取在指定区间的子串

命令:getrange
格式:getrange key start end
说明:start为开始index,end为结束index,index从0开始

127.0.0.1:6379> getrange name 0 3
"wang"
127.0.0.1:6379> getrange name 0 4
"wangx"
127.0.0.1:6379> getrange name 0 5
"wangxi"

4、将给定 key 的值设为 value ,并返回 key 的旧值(old value)。

命令:getset
格式:getset key value

127.0.0.1:6379> getset name wangxiaoyu2
"wangxiaoyu"
127.0.0.1:6379>

5、对 key 所储存的字符串值,获取指定偏移量上的位(bit)
  
命令:getbit
格式:getbit key offset

127.0.0.1:6379> getbit name 0
(integer) 0
127.0.0.1:6379> getbit name 1
(integer) 1
127.0.0.1:6379> getbit name 2
(integer) 1
127.0.0.1:6379> getbit name 3
(integer) 1
127.0.0.1:6379> getbit name 4
(integer) 0

6、获取所有(一个或多个)给定 key 的值

命令:mget
格式:mget key1 [key2] …

127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> set key2 value2
OK
127.0.0.1:6379> set key3 value3
OK
127.0.0.1:6379> mget key1 key2 key3
1) "value1"
2) "value2"
3) "value3"

7、对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)
命令:setbit
格式:setbit key offset value
test_key当前的值"test_value_2",首字母"t"的ASCII码的二进制为0111 0100,若设置第6位为1,则值为0111 0110,对应字母"v"

127.0.0.1:6379> get test_key
"test_value_2"
127.0.0.1:6379> setbit test_key 6 1
(integer) 0
127.0.0.1:6379> get test_key
"vest_value_2"

8、设置指定key的值 ,并将 key 的过期时间设为 seconds (以秒为单位)

命令:setex
格式:setex key seconds value

设置一个过期时间为10s的key

127.0.0.1:6379> setex second_key 10 test_value
OK
127.0.0.1:6379> get second_key
"test_value"
127.0.0.1:6379> get second_key
"test_value"
#10s后
127.0.0.1:6379> get second_key
(nil)

9、只有在 key 不存在时设置 key 的值

命令:setnx
格式:setnx key value

#存在时设置不成功
127.0.0.1:6379> get name
"wangxiaoyu2"
127.0.0.1:6379> setnx name wangxiaoyu3
(integer) 0
127.0.0.1:6379> get name
"wangxiaoyu2"

#不存在时设置成功
127.0.0.1:6379> get name3
(nil)
127.0.0.1:6379> setnx name3 wangxiaoyu3
(integer) 1
127.0.0.1:6379> get name3
"wangxiaoyu3"

10、用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始

命令:setrange
格式:setrange key offset value

127.0.0.1:6379> set test_key test_value
OK
127.0.0.1:6379> get test_key
"test_value"

#从下标5位置开始替换
127.0.0.1:6379> setrange test_key 5 23333
(integer) 10
127.0.0.1:6379> get test_key
"test_23333"

11、返回 key 所储存的字符串值的长度

命令:strlen
格式:strlen key

127.0.0.1:6379> get test_key
"test_23333"
127.0.0.1:6379> strlen test_key
(integer) 10

12、同时设置一个或多个 key-value 对
命令:mset
格式:mset key value [key value] …

127.0.0.1:6379> mset key1 value1 key2 value2 key3 value3
OK
127.0.0.1:6379> mget key1 key2 key3
1) "value1"
2) "value2"
3) "value3"

13、同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在

命令:msetnx
格式:msetnx key value [key value] …

#先设置一下key1-key4
127.0.0.1:6379> mset key1 v1 key2 v2 key3 v3 key4 v4
OK
127.0.0.1:6379> mget key1 key2 key3 key4
1) "v1"
2) "v2"
3) "v3"
4) "v4"

#使用msetnx设置key1-key5,因为key1-key4已经存在了,所以设置不成功
127.0.0.1:6379> msetnx key1 value1 key2 value2 key3 value3 key4 value4 key5 value5
(integer) 0
127.0.0.1:6379> mget key1 key2 key3 key4 key5
1) "v1"
2) "v2"
3) "v3"
4) "v4"
5) (nil)

#设置key5-6,因为都不存在,所以设置成功
127.0.0.1:6379> msetnx key5 v5 key6 v6
(integer) 1
127.0.0.1:6379> mget key1 key2 key3 key4 key5 key6
1) "v1"
2) "v2"
3) "v3"
4) "v4"
5) "v5"
6) "v6"

14、设置指定key的值 ,并将 key 的过期时间设为 ms (以毫秒为单位)

命令:psetex
格式:psetex key ms value

127.0.0.1:6379> psetex key1 10000 value
OK
127.0.0.1:6379> get key1
"value"
#10s后
127.0.0.1:6379> get key1
(nil)

15、将 key 中储存的数字值增一
命令:incr
格式:incr key

127.0.0.1:6379> set int_key 1
OK
127.0.0.1:6379> get int_key
"1"
127.0.0.1:6379> incr int_key
(integer) 2
127.0.0.1:6379> get int_key
"2"
127.0.0.1:6379> incr int_key
(integer) 3
127.0.0.1:6379> get int_key
"3"

16、将 key 所储存的值加上给定的增量值(increment)
  
命令:incrby
格式:incrby key increment

127.0.0.1:6379> get int_key
"3"
127.0.0.1:6379> incrby int_key 10
(integer) 13
127.0.0.1:6379> get int_key
"13"

17、将 key 所储存的值加上给定的浮点增量值

命令:incrbyfloat
格式:incrbyfloat key increment

127.0.0.1:6379> set float_key 1
OK
127.0.0.1:6379> incrbyfloat float_key 0.5
"1.5"
127.0.0.1:6379> get float_key
"1.5"

18、将 key 中储存的数字值减一

命令:decr
格式:decr key

127.0.0.1:6379> get int_key
"13"
127.0.0.1:6379> decr int_key
(integer) 12
127.0.0.1:6379> get int_key
"12"
127.0.0.1:6379> decr int_key
(integer) 11
127.0.0.1:6379> get int_key
"11"

19、key 所储存的值减去给定的减量值(decrement)

命令:decrby
格式:decrby key decrement

127.0.0.1:6379> get int_key
"11"
127.0.0.1:6379> decrby int_key 5
(integer) 6
127.0.0.1:6379> get int_key
"6"

20、为指定key的值,追加value,value都作为字符串直接追加。

命令:append
格式:append key value

#字符串追加
127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379> append key1 value2
(integer) 12
127.0.0.1:6379> get key1
"value1value2"

三、redis hash类型基本操作

Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。

1、将哈希表 key 中的字段 field 的值设为 value

命令:hset
格式:hset key field value

127.0.0.1:6379> hset hash_key key1 v1
(integer) 1
127.0.0.1:6379> hset hash_key key2 v2
(integer) 1

2、获取存储在哈希表中指定字段的值

命令:hget
格式:hget key field

127.0.0.1:6379> hget hash_key key1
"v1"
127.0.0.1:6379> hget hash_key key2
"v2"

3、删除一个或多个哈希表字段

命令:hdel
格式:hdel key field

127.0.0.1:6379> hget hash_key key1
"v1"
127.0.0.1:6379> hget hash_key key2
"v2"

#删除key2这个字段
127.0.0.1:6379> hdel hash_key key2
(integer) 1
127.0.0.1:6379> hget hash_key key2
(nil)
127.0.0.1:6379> hget hash_key key1
"v1"

4、查看哈希表 key 中,指定的字段是否存在
  
命令:hexists
格式:hexists key field

127.0.0.1:6379> hget hash_key key1
"v1"
127.0.0.1:6379> hget hash_key key2
(nil)
#key1存在,返回1 key2不存在,返回0
127.0.0.1:6379> hexists hash_key key1
(integer) 1
127.0.0.1:6379> hexists hash_key key2
(integer) 0

5、获取在哈希表中指定 key 的所有字段和值

命令:hgetall
格式:hgetall key

#设置key1和key2后获取表中所有字段和值
127.0.0.1:6379> hset hash_key key1 v1
(integer) 0
127.0.0.1:6379> hset hash_key key2 v2
(integer) 1
127.0.0.1:6379> hgetall hash_key
1) "key1"
2) "v1"
3) "key2"
4) "v2"

#删除key2后再查看
127.0.0.1:6379> hdel hash_key key2
(integer) 1
127.0.0.1:6379> hgetall hash_key
1) "key1"
2) "v1"

6、获取所有哈希表中的key字段

命令:hkeys
格式:hkeys key

127.0.0.1:6379> hset hash_key key1 v1
(integer) 0
127.0.0.1:6379> hkeys hash_key
1) "key1"
127.0.0.1:6379> hset hash_key key2 v2
(integer) 1
127.0.0.1:6379> hkeys hash_key
1) "key1"
2) "key2"

7、获取哈希表中字段的数量

命令:hlen
格式:hlen key

127.0.0.1:6379> hgetall hash_key
1) "key1"
2) "v1"
3) "key2"
4) "v2"
127.0.0.1:6379> hlen hash_key
(integer) 2

8、同时将多个 field-value (域-值)对设置到哈希表 key 中

命令:hmset
格式:hmset key field1 value1 [field2 value2] …

127.0.0.1:6379> hgetall hash_key
1) "key1"
2) "v1"
3) "key2"
4) "v2"
127.0.0.1:6379> hkeys hash_key
1) "key1"
2) "key2"

#设置多个field-value
127.0.0.1:6379> hmset hash_key key3 v3 key4 v4 key5 v5
OK

127.0.0.1:6379> hgetall hash_key
 1) "key1"
 2) "v1"
 3) "key2"
 4) "v2"
 5) "key3"
 6) "v3"
 7) "key4"
 8) "v4"
 9) "key5"
10) "v5"
127.0.0.1:6379> hkeys hash_key
1) "key1"
2) "key2"
3) "key3"
4) "key4"
5) "key5"

9、获取所有给定字段的值

命令:hmget
格式:hmget key field1 [field2] …

127.0.0.1:6379> hmget hash_key key1 key3 key5
1) "v1"
2) "v3"
3) "v5

10、获取哈希表中所有值

命令:hvals
格式:hvals key

127.0.0.1:6379> hgetall hash_key
 1) "key1"
 2) "v1"
 3) "key2"
 4) "v2"
 5) "key3"
 6) "v3"
 7) "key4"
 8) "v4"
 9) "key5"
10) "v5"
127.0.0.1:6379> hvals hash_key
1) "v1"
2) "v2"
3) "v3"
4) "v4"
5) "v5"

11、只有在字段 field 不存在时,设置哈希表字段的值

命令:hsetnx
格式:hsetnx key field value

#先用hset设置key1
127.0.0.1:6379> hset hash_key key1 v1
(integer) 1
127.0.0.1:6379> hget hash_key key1
"v1"

#使用hsetnx设置key1,因为已经存在,所以不成功
127.0.0.1:6379> hsetnx hash_key key1 value10000
(integer) 0
127.0.0.1:6379> hget hash_key key1
"v1"

#使用hsetnx设置key10,之前不存在所以设置成功
127.0.0.1:6379> hsetnx hash_key key10 value10000
(integer) 1
127.0.0.1:6379> hget hash_key key10
"value10000"

12、为哈希表 key 中的指定字段的整数值加上增量 increment

命令:hincrby
格式:hincrby key field increment

#设置value值为100
127.0.0.1:6379> hset hash_key num 100
(integer) 1
127.0.0.1:6379> hget hash_key num
"100"

#加5
127.0.0.1:6379> hincrby hash_key num 5
(integer) 105
127.0.0.1:6379> hget hash_key num
"105"

#减15
127.0.0.1:6379> hincrby hash_key num -15
(integer) 90
127.0.0.1:6379> hget hash_key num
"90"

13、为哈希表 key 中的指定字段的浮点数值加上增量 increment

命令:hincrbyfloat
格式:hincrbyfloat key field increment

#设置value值为100
127.0.0.1:6379> hset hash_key float 100
(integer) 1
127.0.0.1:6379> hget hash_key float
"100"

#加5
127.0.0.1:6379> hincrbyfloat hash_key float 0.5
"100.5"
127.0.0.1:6379> hget hash_key float
"100.5"

#减1.5
127.0.0.1:6379> hincrbyfloat hash_key float -1.5
"99"
127.0.0.1:6379> hget hash_key float
"99"

14、迭代哈希表中的键值对

命令:hscan
格式:hscan key cursor [MATCH pattern] [COUNT count]

#先删除之前的表,重新设置一下
127.0.0.1:6379> del hash_key
(integer) 1
127.0.0.1:6379> hmset hash_key key1 v1 key2 v2 key3 v3 key4 v4 key5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10
OK
127.0.0.1:6379> hgetall hash_key
 1) "key1"
 2) "v1"
 3) "key2"
 4) "v2"
 5) "key3"
 6) "v3"
 7) "key4"
 8) "v4"
 9) "key5"
10) "v5"
11) "k6"
12) "v6"
13) "k7"
14) "v7"
15) "k8"
16) "v8"
17) "k9"
18) "v9"
19) "k10"
20) "v10"

#匹配k*
127.0.0.1:6379> hscan hash_key 0 match k*
1) "0"
2)  1) "key1"
    2) "v1"
    3) "key2"
    4) "v2"
    5) "key3"
    6) "v3"
    7) "key4"
    8) "v4"
    9) "key5"
   10) "v5"
   11) "k6"
   12) "v6"
   13) "k7"
   14) "v7"
   15) "k8"
   16) "v8"
   17) "k9"
   18) "v9"
   19) "k10"
   20) "v10"

#匹配key*
127.0.0.1:6379> hscan hash_key 0 match key*
1) "0"
2)  1) "key1"
    2) "v1"
    3) "key2"
    4) "v2"
    5) "key3"
    6) "v3"
    7) "key4"
    8) "v4"
    9) "key5"
   10) "v5"

四、redis list类型基本操作

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

1、将一个或多个值插入到列表头部

命令:lpush
格式:lpush key value1 [value2] …

127.0.0.1:6379> lpush list_key 1
(integer) 1
127.0.0.1:6379> lpush list_key 2 3 4
(integer) 4

2、获取列表指定范围内的元素

命令:lrange
格式:lrange key begin_index end_index

#插入数据
127.0.0.1:6379> lpush list_key 1
(integer) 1
127.0.0.1:6379> lpush list_key 2 3 4
(integer) 4

#查看0到1下标位置的value
127.0.0.1:6379> lrange list_key 0 1
1) "4"
2) "3"
#查看0下标位置的value
127.0.0.1:6379> lrange list_key 0 0
1) "4"
127.0.0.1:6379> lrange list_key 2 3
1) "2"
2) "1"
127.0.0.1:6379> lrange list_key 0 10
1) "4"
2) "3"
3) "2"
4) "1"

3、将一个值插入到已存在的列表头部,列表如果不存在则插入失败

命令:lpushx
格式:lpushx key value

#先将上面创建的列表删除
127.0.0.1:6379> del list_key
(integer) 1
127.0.0.1:6379> lrange list_key 0 10
(empty list or set)

#使用lpushx命令插入不存在的列表,失败
127.0.0.1:6379> lpushx list_key 1
(integer) 0
127.0.0.1:6379> lrange list_key 0 10
(empty list or set)

#先用lpush创建列表并插入2
127.0.0.1:6379> lpush list_key 1
(integer) 1
127.0.0.1:6379> lrange list_key 0 10
1) "1"
#然后使用lpushx插入2,成功
127.0.0.1:6379> lpushx list_key 2
(integer) 2
127.0.0.1:6379> lrange list_key 0 10
1) "2"
2) "1"

4、将一个或多个值插入到列表尾部

命令:rpush
格式:rpush key value1 [value2] …

127.0.0.1:6379> lrange list_key 0 10
1) "2"
2) "1"
#lpush从头部插入
127.0.0.1:6379> lpush list_key 3
(integer) 3
127.0.0.1:6379> lrange list_key 0 10
1) "3"
2) "2"
3) "1"

#rpush从尾部插入
127.0.0.1:6379> rpush list_key 4
(integer) 4
127.0.0.1:6379> lrange list_key 0 10
1) "3"
2) "2"
3) "1"
4) "4"

5、将一个值插入到已存在的列表尾部

命令:rpushx
格式:rpushx key value

#先将前面的列表删除
127.0.0.1:6379> del list_key
(integer) 1
127.0.0.1:6379> lrange list_key 0 10
(empty list or set)

#使用rpushx命令插入不存在的列表,失败
127.0.0.1:6379> rpushx list_key 1
(integer) 0
127.0.0.1:6379> lrange list_key 0 10
(empty list or set)

#使用rpush插入1
127.0.0.1:6379> rpush list_key 1
(integer) 1
127.0.0.1:6379> lrange list_key 0 10
1) "1"
#在使用rpushx插入2,成功
127.0.0.1:6379> rpushx list_key 2
(integer) 2
127.0.0.1:6379> lrange list_key 0 10
1) "1"
2) "2"

6、移出并获取列表的第一个元素

命令:lpop
格式:lpop key

127.0.0.1:6379> del list_key
(integer) 1
127.0.0.1:6379> lpush list_key 1 2 3 4 5 
(integer) 5
127.0.0.1:6379> lrange list_key 0 10
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"

#移出开头的第一个元素
127.0.0.1:6379> lpop list_key
"5"
127.0.0.1:6379> lrange list_key 0 10
1) "4"
2) "3"
3) "2"
4) "1"

7、移出并获取列表的最后一个元素

命令:rpop
格式:rpop key

127.0.0.1:6379> lrange list_key 0 10
1) "4"
2) "3"
3) "2"
4) "1"

#移出列表最后一个元素
127.0.0.1:6379> rpop list_key
"1"
127.0.0.1:6379> lrange list_key 0 10
1) "4"
2) "3"
3) "2"

8、获取列表长度

命令:llen
格式:llen key

127.0.0.1:6379> lrange list_key 0 10
1) "4"
2) "3"
3) "2"
#当前列表长度为3
127.0.0.1:6379> llen list_key
(integer) 3

#插入3个元素后再查看,列表长度为6
127.0.0.1:6379> lpush list_key 5 6 7 
(integer) 6
127.0.0.1:6379> lrange list_key 0 10
1) "7"
2) "6"
3) "5"
4) "4"
5) "3"
6) "2"
127.0.0.1:6379> llen list_key
(integer) 6

9、通过索引获取列表中的元素

命令:lindex
格式:lindex key index

127.0.0.1:6379> lrange list_key 0 10
1) "7"
2) "6"
3) "5"
4) "4"
5) "3"
6) "2"

127.0.0.1:6379> lindex list_key 4
"3"
127.0.0.1:6379> lindex list_key 0
"7"
127.0.0.1:6379> lindex list_key 7
(nil)

10、移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止

命令:blpop
格式:blpop key1 [key2] timeout

#先将元素插入l1 l2两个列表
127.0.0.1:6379> lpush l1 1 2 3 4
(integer) 4
127.0.0.1:6379> lpush l2 a b c d
(integer) 4
127.0.0.1:6379> lrange l1 0 10
1) "4"
2) "3"
3) "2"
4) "1"
127.0.0.1:6379> lrange l2 0 10
1) "d"
2) "c"
3) "b"
4) "a"

#使用blpop不断从两个列表取出第一个元素,这里第一个列表取完才会到第二个列表取
127.0.0.1:6379> blpop l1 l2 1
1) "l1"
2) "4"
127.0.0.1:6379> blpop l1 l2 1
1) "l1"
2) "3"
127.0.0.1:6379> blpop l1 l2 1
1) "l1"
2) "2"
127.0.0.1:6379> blpop l1 l2 1
1) "l1"
2) "1"
127.0.0.1:6379> blpop l1 l2 1
1) "l2"
2) "d"
127.0.0.1:6379> blpop l1 l2 1
1) "l2"
2) "c"
127.0.0.1:6379> blpop l1 l2 1
1) "l2"
2) "b"
127.0.0.1:6379> blpop l1 l2 1
1) "l2"
2) "a"

#列表没有元素会阻塞列表直到等待超时
127.0.0.1:6379> blpop l1 l2 1
(nil)
(1.03s)

#一直等待则设置timeout为0
127.0.0.1:6379> blpop l1 l2 0

11、移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止

命令:brpop
格式:brpop key1 [key2] timeout

操作与blpop相同,此处略

12、移除列表的最后一个元素,并将该元素添加到另一个列表并返回

命令:rpoplpush
格式:rpoplpush source target

127.0.0.1:6379> del l1 l2
(integer) 0
#像列表l1里插入三个元素
127.0.0.1:6379> lpush l1 1 2 3
(integer) 3
127.0.0.1:6379> lrange l1 0 10
1) "3"
2) "2"
3) "1"
#列表l2为空
127.0.0.1:6379> lrange l2 0 10
(empty list or set)

#从列表l1中取出最后一个元素插到列表里l2第一个元素
127.0.0.1:6379> rpoplpush l1 l2
"1"
127.0.0.1:6379> lrange l1 0 10
1) "3"
2) "2"
127.0.0.1:6379> lrange l2 0 10
1) "1"

#继续执行直到l1取完
127.0.0.1:6379> rpoplpush l1 l2
"2"
127.0.0.1:6379> rpoplpush l1 l2
"3"
127.0.0.1:6379> rpoplpush l1 l2
(nil)
127.0.0.1:6379> lrange l1 0 10
(empty list or set)
127.0.0.1:6379> lrange l2 0 10
1) "3"
2) "2"
3) "1"

13、从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止

命令:brpoplpush
格式:brpoplpush source target timeout

127.0.0.1:6379> del l1 l2
(integer) 1
#向列表l1传入元素,列表l2位空
127.0.0.1:6379> lpush l1 1 2 3
(integer) 3
127.0.0.1:6379> lrange l1 0 10
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> lrange l2 0 10
(empty list or set)

#将l1最后一个元素取出并插入到l2第一个元素
127.0.0.1:6379> brpoplpush l1 l2 1
"1"
127.0.0.1:6379> lrange l1 0 10
1) "3"
2) "2"
127.0.0.1:6379> lrange l2 0 10
1) "1"
127.0.0.1:6379> brpoplpush l1 l2 1
"2"
127.0.0.1:6379> brpoplpush l1 l2 1
"3"
127.0.0.1:6379> brpoplpush l1 l2 1
(nil)
(1.05s)
127.0.0.1:6379> lrange l1 0 10
(empty list or set)
127.0.0.1:6379> lrange l2 0 10
1) "3"
2) "2"
3) "1"

14、在列表的第一个指定元素pivot前或者后插入元素value

命令:linsert
格式:linsert key before|after pivot value

127.0.0.1:6379> del list_key
(integer) 1
127.0.0.1:6379> lpush list_key 1 2 1 3 1 4
(integer) 6
127.0.0.1:6379> lrange list_key 0 10
1) "4"
2) "1"   //第一个"1"元素
3) "3"
4) "1"
5) "2"
6) "1"

#在第一个1元素之后插入5
127.0.0.1:6379> linsert list_key after 1 5
(integer) 7
127.0.0.1:6379> lrange list_key 0 10
1) "4"
2) "1"
3) "5"
4) "3"
5) "1"
6) "2"
7) "1"
#在第一个1元素之前插入6
127.0.0.1:6379> linsert list_key before 1 6
(integer) 8
127.0.0.1:6379> lrange list_key 0 10
1) "4"
2) "6"
3) "1"
4) "5"
5) "3"
6) "1"
7) "2"
8) "1"

15、从列表头部开始,移除count个指定元素value

命令:lrem
格式:lrem key count value

127.0.0.1:6379> lrange list_key 0 10
1) "4"
2) "6"
3) "1"
4) "5"
5) "3"
6) "1"
7) "2"
8) "1"

#移除一个1
127.0.0.1:6379> lrem list_key 1 1
(integer) 1
127.0.0.1:6379> lrange list_key 0 10
1) "4"
2) "6"
3) "5"
4) "3"
5) "1"
6) "2"
7) "1"

#移除两个1
127.0.0.1:6379> lrem list_key 2 1
(integer) 2
127.0.0.1:6379> lrange list_key 0 10
1) "4"
2) "6"
3) "5"
4) "3"
5) "2"

#没有1了,执行结果返回0,不变
127.0.0.1:6379> lrem list_key 1 1
(integer) 0
127.0.0.1:6379> lrange list_key 0 10
1) "4"
2) "6"
3) "5"
4) "3"
5) "2"

16、通过索引设置列表元素的值

命令:lset
格式:lset key index value

127.0.0.1:6379> del list_key
(integer) 1
127.0.0.1:6379> rpush list_key 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange list_key 0 10
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"

#将0下标位置的元素设为10
127.0.0.1:6379> lset list_key 0 10
OK
127.0.0.1:6379> lrange list_key 0 10
1) "10"
2) "2"
3) "3"
4) "4"
5) "5"
##将3下标位置的元素设为10
127.0.0.1:6379> lset list_key 3 10
OK
127.0.0.1:6379> lrange list_key 0 10
1) "10"
2) "2"
3) "3"
4) "10"
5) "5"

17、对一个列表进行修剪,删除指定下标区间[start,stop]之外的元素

命令:ltrim
格式:ltrim key start stop

127.0.0.1:6379> del list_key
(integer) 1
127.0.0.1:6379> rpush list_key 1 2 3 4 5 6 7 8 9
(integer) 9
127.0.0.1:6379> lrange list_key 0 10
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"

#只保留下标3到6位置的元素,其余的删除
127.0.0.1:6379> ltrim list_key 3 6
OK
127.0.0.1:6379> lrange list_key 0 10
1) "4"
2) "5"
3) "6"
4) "7

五、redis set类型基本操作

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

1、向集合添加一个或多个成员

命令:sadd
格式:sadd key member1 [member2]

127.0.0.1:6379> sadd set_key m1
(integer) 1
127.0.0.1:6379> sadd set_key m2 m3
(integer) 2

2、返回集合中的所有成员

命令:smembers
格式:smembers key

127.0.0.1:6379> smembers set_key
1) "m3"
2) "m2"
3) "m1"

3、移除并返回集合中的一个随机元素

命令:spop
格式:spop key

127.0.0.1:6379> sadd set_key m1 m2 m3 m4 m5 m6 m7 m8 m9
(integer) 6
127.0.0.1:6379> smembers set_key
1) "m4"
2) "m1"
3) "m5"
4) "m8"
5) "m2"
6) "m3"
7) "m6"
8) "m7"
9) "m9"

#移除一个随机元素
127.0.0.1:6379> spop set_key
"m1"
127.0.0.1:6379> smembers set_key
1) "m5"
2) "m8"
3) "m2"
4) "m3"
5) "m6"
6) "m7"
7) "m4"
8) "m9"

4、移除集合中一个或多个成员

命令:srem
格式:srem set_key member1 [member2]

127.0.0.1:6379> smembers set_key
1) "m5"
2) "m8"
3) "m2"
4) "m3"
5) "m6"
6) "m7"
7) "m4"
8) "m9"

#移除指定元素
127.0.0.1:6379> srem set_key m2 m3
(integer) 2
127.0.0.1:6379> smembers set_key
1) "m7"
2) "m5"
3) "m4"
4) "m9"
5) "m8"
6) "m6"

#如果已经不存在则返回0
127.0.0.1:6379> srem set_key m2 m3
(integer) 0
127.0.0.1:6379> smembers set_key
1) "m5"
2) "m7"
3) "m4"
4) "m9"
5) "m8"
6) "m6"

5、判断 member 元素是否是集合 key 的成员

命令:sismember
格式:sismember key member

127.0.0.1:6379> smembers set_key
1) "m5"
2) "m7"
3) "m4"
4) "m9"
5) "m8"
6) "m6"

#如果是则返回1
127.0.0.1:6379> sismember set_key m8
(integer) 1

#不是则返回0
127.0.0.1:6379> sismember set_key m1
(integer) 0

6、获取集合的成员数

命令:scard
格式:scard key

127.0.0.1:6379> smembers set_key
1) "m5"
2) "m7"
3) "m4"
4) "m9"
5) "m8"
6) "m6"
127.0.0.1:6379> scard set_key
(integer) 6

7、返回给定所有集合的差集

命令:sdiff
格式:sdiff key1 [key2] …

127.0.0.1:6379> sadd k1 m1 m2 m3
(integer) 3
127.0.0.1:6379> sadd k2 m3 m4 m5
(integer) 3

#k1和k2的差集
127.0.0.1:6379> sdiff k1 k2
1) "m2"
2) "m1"
#k2和k1的差集
127.0.0.1:6379> sdiff k2 k1
1) "m4"
2) "m5"

127.0.0.1:6379> sadd k3 m5 m6 m7
(integer) 3
#k2和k1k3的差集
127.0.0.1:6379> sdiff k1 k2 k3
1) "m2"
2) "m1"
127.0.0.1:6379> sdiff k2 k1 k3
1) "m4"

8、返回给定所有集合的差集并存储在 destination 中

命令:sdiffstore
格式:sdiffstore destination key1 [key2] …

127.0.0.1:6379> sadd k1 m1 m2 m3
(integer) 0
127.0.0.1:6379> sadd k2 m3 m4 m5
(integer) 0
127.0.0.1:6379> sadd k3 m5 m6 m7
(integer) 0

#将k1k2的差集存储到d1中
127.0.0.1:6379> sdiffstore d1 k1 k2
(integer) 2
127.0.0.1:6379> smembers d1
1) "m2"
2) "m1"

#将k2k1的差集存储到d2中
127.0.0.1:6379> sdiffstore d2 k2 k1
(integer) 2
127.0.0.1:6379> smembers d2
1) "m4"
2) "m5"

9、返回给定所有集合的交集

命令:sinter
格式:sinter key1 [key2] …

127.0.0.1:6379> del k1 k2 k3
(integer) 3
127.0.0.1:6379> sadd k1 m1 m2 m3
(integer) 3
127.0.0.1:6379> sadd k2 m2 m3 m4
(integer) 3
127.0.0.1:6379> sadd k3 m3 m4 m5
(integer) 3

#获取k1和k2的交集
127.0.0.1:6379> sinter k1 k2
1) "m3"
2) "m2"
#获取k1和k2k3的交集
127.0.0.1:6379> sinter k1 k2 k3
1) "m3"
#获取k2和k1的交集
127.0.0.1:6379>  sinter k2 k1
1) "m3"
2) "m2"
#获取k2和k1k3的交集
127.0.0.1:6379> sinter k2 k1 k3
1) "m3"

10、返回给定所有集合的交集并存储在 destination 中

命令:sinterstore
格式:sinterstore destination key1 [key2] …

127.0.0.1:6379> del k1 k2 k3
(integer) 3
127.0.0.1:6379> sadd k1 m1 m2 m3
(integer) 3
127.0.0.1:6379> sadd k2 m2 m3 m4
(integer) 3
127.0.0.1:6379> sadd k3 m3 m4 m5
(integer) 3

#将k1和k2的交集存储到d1
127.0.0.1:6379> sinterstore d1 k1 k2
(integer) 2
127.0.0.1:6379> smembers d1
1) "m2"
2) "m3"
#将k1k2k3的交集存储到d2
127.0.0.1:6379> sinterstore d2 k1 k2 k3
(integer) 1
127.0.0.1:6379> smembers d2
1) "m3"

11、将 member 元素从 source 集合移动到 destination 集合

命令:smove
格式:smove src des members

127.0.0.1:6379> sadd src m1 m2 m3
(integer) 3
127.0.0.1:6379> sadd des m4 m5 m6
(integer) 3
127.0.0.1:6379> smembers src
1) "m3"
2) "m2"
3) "m1"
127.0.0.1:6379> smembers des
1) "m4"
2) "m6"
3) "m5"

#从src中将m1元素移动到des中
127.0.0.1:6379> smove src des m1
(integer) 1
127.0.0.1:6379> smembers src
1) "m3"
2) "m2"
127.0.0.1:6379> smembers des
1) "m4"
2) "m6"
3) "m1"
4) "m5"

#src中m0不存在,所以返回0
127.0.0.1:6379> smove src des m0
(integer) 0
127.0.0.1:6379> smembers src
1) "m3"
2) "m2"
127.0.0.1:6379> smembers des
1) "m4"
2) "m6"
3) "m1"
4) "m5"

12、返回集合中一个或多个随机数

命令:srandmember
格式:srandmember key [count]

127.0.0.1:6379> sadd rand_set m1 m2 m3 m4 m5 m6 m7 m8
(integer) 8
127.0.0.1:6379> smembers rand_set
1) "m4"
2) "m1"
3) "m5"
4) "m8"
5) "m2"
6) "m3"
7) "m6"
8) "m7"
127.0.0.1:6379> srandmember rand_set
"m4"
127.0.0.1:6379> srandmember rand_set
"m1"
127.0.0.1:6379> srandmember rand_set 3
1) "m1"
2) "m8"
3) "m2"

13、返回所有给定集合的并集

命令:sunion
格式:sunion key1 [key2] …

127.0.0.1:6379> del k1 k2 k3
(integer) 3
127.0.0.1:6379> sadd k1 m1 m2
(integer) 2
127.0.0.1:6379> sadd k2 m3 m4
(integer) 2
127.0.0.1:6379> sadd k3 m1 m3 m5 m6
(integer) 4

#k1、k2的并集
127.0.0.1:6379> sunion k1 k2
1) "m3"
2) "m4"
3) "m2"
4) "m1"
#k1、k2的并集
127.0.0.1:6379> sunion k1 k3
1) "m6"
2) "m1"
3) "m5"
4) "m2"
5) "m3"
#k1、k2、k3的并集
127.0.0.1:6379> sunion k1 k2 k3
1) "m4"
2) "m1"
3) "m5"
4) "m2"
5) "m3"
6) "m6"

14、所有给定集合的并集存储在 destination 集合中

命令:sunionstore
格式:sunionstore destination key1 [key2] …

127.0.0.1:6379> del k1 k2 k3
(integer) 3
127.0.0.1:6379> sadd k1 m1 m2
(integer) 2
127.0.0.1:6379> sadd k2 m3 m4
(integer) 2
127.0.0.1:6379> sadd k3 m1 m3 m5 m6
(integer) 4
127.0.0.1:6379> sunionstore d1 k1 k2
(integer) 4
127.0.0.1:6379> smembers d1
1) "m3"
2) "m4"
3) "m2"
4) "m1"
127.0.0.1:6379> sunionstore d2 k1 k2 k3
(integer) 6
127.0.0.1:6379> smembers d2
1) "m4"
2) "m1"
3) "m5"
4) "m2"
5) "m3"
6) "m6"

15、迭代集合中的元素

命令:sscan
格式:sscan key cursor [MATCH pattern] [COUNT count]

127.0.0.1:6379> del set_key
(integer) 1
127.0.0.1:6379> sadd set_key m1 m2 m3 member1 member2 member3
(integer) 6
127.0.0.1:6379> sscan set_key 0
1) "0"
2) 1) "m2"
   2) "m3"
   3) "m1"
   4) "member2"
   5) "member3"
   6) "member1"
127.0.0.1:6379> sscan set_key 0 MATCH m*
1) "0"
2) 1) "m2"
   2) "m3"
   3) "m1"
   4) "member2"
   5) "member3"
   6) "member1"
127.0.0.1:6379> sscan set_key 0 MATCH me*
1) "0"
2) 1) "member2"
   2) "member3"
   3) "member1"
127.0.0.1:6379> sscan set_key 0 MATCH me* COUNT 1
1) "2"
2) (empty list or set)
127.0.0.1:6379> sscan set_key 0 MATCH me* COUNT 0
(error) ERR syntax error
127.0.0.1:6379> sscan set_key 0 MATCH me* COUNT 3
1) "1"
2) 1) "member2"

六、redis sorted set 基本操作

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。

1、向有序集合添加一个或多个成员,或者更新已存在成员的分数

命令:zadd
格式:zadd key score1 member1 [score2 member2] …

#添加成员
127.0.0.1:6379> zadd k1 1.0 m1 2.0 m2
(integer) 2
#更新成员分数
127.0.0.1:6379> zadd k1 3.0 m1 4.0 m2
(integer) 0

2、通过索引区间返回有序集合指定区间内的成员

命令:zrange
格式:zrange key start stop [WITHSCORES]

127.0.0.1:6379> zadd k1 1.0 m1 2.0 m2
(integer) 0
#获取有序集合成员
127.0.0.1:6379> zrange k1 0 10
1) "m1"
2) "m2"

127.0.0.1:6379> zadd k1 3.0 m1 4.0 m3
(integer) 1
##获取有序集合成员
127.0.0.1:6379> zrange k1 0 10
1) "m2"
2) "m1"
3) "m3"

#获取有序集合成员和分数
127.0.0.1:6379> zrange k1 0 10 WITHSCORES
1) "m2"
2) "2"
3) "m1"
4) "3"
5) "m3"
6) "4"

3、获取有序集合的成员数

命令:zcard
格式:zcard key

127.0.0.1:6379> zrange k1 0 10
1) "m2"
2) "m1"
3) "m3"
#获取有序集合的成员数
127.0.0.1:6379> zcard k1
(integer) 3

4、计算在有序集合中指定区间分数的成员数

命令:zcount
格式:zcount key min max

127.0.0.1:6379> zadd k1 1.1 m1 1.2 m2 1.3 m3 2.1 m4 2.2 m5 2.3 m6
(integer) 3
127.0.0.1:6379> zrange k1 0 -1 withscores
 1) "m1"
 2) "1.1000000000000001"
 3) "m2"
 4) "1.2"
 5) "m3"
 6) "1.3"
 7) "m4"
 8) "2.1000000000000001"
 9) "m5"
10) "2.2000000000000002"
11) "m6"
12) "2.2999999999999998"

#分数为1到2的成员数
127.0.0.1:6379> zcount k1 1 2
(integer) 3
#分数为1到3的成员数
127.0.0.1:6379> zcount k1 1 3
(integer) 6

5、有序集合中对指定成员的分数加上增量 increment

命令:zincrby
格式:zincrby key increment member

127.0.0.1:6379> del k1
(integer) 1
127.0.0.1:6379> zadd k1 1.1 m1 1.2 m2
(integer) 2
127.0.0.1:6379> zrange k1 0 -1 withscores
1) "m1"
2) "1.1000000000000001"
3) "m2"
4) "1.2"

#对m1加0.5分数
127.0.0.1:6379> zincrby k1 0.5 m1
"1.6000000000000001"
127.0.0.1:6379> zrange k1 0 -1 withscores
1) "m2"
2) "1.2"
3) "m1"
4) "1.6000000000000001"

6、计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中

命令:zinterstore
格式:zinterstore des numkeys key1 [key2] …

127.0.0.1:6379> del k1
(integer) 1
127.0.0.1:6379> zadd k1 1.0 m1 2.0 m2 3.0 m3
(integer) 3
127.0.0.1:6379> zadd k2 1.0 m3 2.0 m4 3.0 m5
(integer) 3
127.0.0.1:6379> zrange k1 0 -1 withscores
1) "m1"
2) "1"
3) "m2"
4) "2"
5) "m3"
6) "3"
127.0.0.1:6379> zrange k2 0 -1 withscores
1) "m3"
2) "1"
3) "m4"
4) "2"
5) "m5"
6) "3"

#计算k1k2的交集并存储在d1中
127.0.0.1:6379> zinterstore d1 2 k1 k2
(integer) 1
127.0.0.1:6379> zrange d1 0 -1 withscores
1) "m3"
2) "4"

#计算k2k1的交集并存储在d2中
127.0.0.1:6379> zinterstore d2 2 k2 k1
(integer) 1
127.0.0.1:6379> zrange d2 0 -1 withscores
1) "m3"
2) "4"


127.0.0.1:6379> zadd k3 3.0 m1 4.0 m3 5.0 m5
(integer) 3
#计算k1k2k3交集并存储在d3中
127.0.0.1:6379> zinterstore d3 3 k1 k2 k3
(integer) 1
127.0.0.1:6379> zrange d3 0 -1 withscores
1) "m3"
2) "8"

127.0.0.1:6379> zinterstore d4 3 k3 k2 k1
(integer) 1
127.0.0.1:6379> zrange d4 0 -1 withscores
1) "m3"
2) "8"
127.0.0.1:6379> zinterstore d5 3 k2 k3 k1
(integer) 1
127.0.0.1:6379> zrange d5 0 -1 withscores
1) "m3"
2) "8"

7、在相同分数的有序集合中,计算指定字典区间内成员数量(没太看懂)
命令:zlexcount
格式:zlexcount key min max

说明:
1、对于分数不相同的有序集合使用时,得到的值可能不正确。
2、min/max的填写,可以写 “-”(最小值),"+"(最大值),或者是以"["开头

127.0.0.1:6379> zadd k1 1 m1 1 m2 1 m3 1 m4 1 m5 1 n1 1 n2 1 n3
(integer) 0
127.0.0.1:6379> zrange k1 0 -1 withscores
 1) "m1"
 2) "1"
 3) "m2"
 4) "1"
 5) "m3"
 6) "1"
 7) "m4"
 8) "1"
 9) "m5"
10) "1"
11) "n1"
12) "1"
13) "n2"
14) "1"
15) "n3"
16) "1"
127.0.0.1:6379> zlexcount k1 [m1 [m2
(integer) 2
127.0.0.1:6379> zlexcount k1 [m [n
(integer) 5
127.0.0.1:6379> zlexcount k1 - [n
(integer) 5
127.0.0.1:6379> zlexcount k1 - +
(integer) 8

8、在相同分数的有序集合中,通过字典区间返回有序集合的成员

命令:zrangebylex
格式:zrangebylex key min max [LIMIT offset count]

127.0.0.1:6379> zadd k1 1 m1 1 m2 1 m3 1 m4 1 m5 1 n1 1 n2 1 n3
(integer) 0
127.0.0.1:6379> zrangebylex k1 [m [n
1) "m1"
2) "m2"
3) "m3"
4) "m4"
5) "m5"
127.0.0.1:6379> zrangebylex k1 [n1 +
1) "n1"
2) "n2"
3) "n3"
127.0.0.1:6379> zrangebylex k1 [m [n LIMIT 2 3
1) "m3"
2) "m4"
3) "m5"
127.0.0.1:6379> zrangebylex k1 [n1 + LIMIT 2 3
1) "n3"

9、通过分数返回有序集合指定区间内的成员

命令:zrangebyscore
格式:zrangebyscore key min max [WITHSCORES] [LIMIT offset count]

127.0.0.1:6379> del k1
(integer) 1
127.0.0.1:6379> zadd k1 1 a 2 b 3 c 4 d 5 e
(integer) 5
127.0.0.1:6379> zrangebyscore k1 1 2
1) "a"
2) "b"
127.0.0.1:6379> zrangebyscore k1 3 5
1) "c"
2) "d"
3) "e"
127.0.0.1:6379> zrangebyscore k1 3 5 withscores
1) "c"
2) "3"
3) "d"
4) "4"
5) "e"
6) "5"
127.0.0.1:6379> zrangebyscore k1 3 5 withscores limit 2 1
1) "e"
2) "5"

10、返回有序集合中指定成员的索引

命令:zrank
格式:zrank key member

127.0.0.1:6379> del k1
(integer) 1
127.0.0.1:6379> zadd k1 1 a 2 b 3 c 4 d 5 e
(integer) 5
127.0.0.1:6379> zrank k1 b
(integer) 1
127.0.0.1:6379> zrange k1 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
127.0.0.1:6379> zrank k1 e
(integer) 4

11、移除有序集合中的一个或多个成员
  
命令:zrem
格式:zrem key member1 [member2] …

127.0.0.1:6379> del k1
(integer) 1
127.0.0.1:6379> zadd k1 1 a 2 b 3 c 4 d 5 e
(integer) 5
127.0.0.1:6379> zrange k1 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"

#删除abc三个成员
127.0.0.1:6379> zrem k1 a b c
(integer) 3
127.0.0.1:6379> zrange k1 0 -1
1) "d"
2) "e"

12、移除相同分数的有序集合中给定的字典区间的所有成员

命令:zremrangebylex
格式:zremrangebylex key min max

127.0.0.1:6379> del k1
(integer) 1
127.0.0.1:6379> zadd k1 1 m1 1 m2 1 m3 1 m4 1 m5 1 n1 1 n2 1 n3
(integer) 8
127.0.0.1:6379> zrange k1 0 -1
1) "m1"
2) "m2"
3) "m3"
4) "m4"
5) "m5"
6) "n1"
7) "n2"
8) "n3"
127.0.0.1:6379> zremrangebylex k1 [m [n
(integer) 5
127.0.0.1:6379> zrange k1 0 -1
1) "n1"
2) "n2"
3) "n3"


127.0.0.1:6379> del k1
(integer) 1
127.0.0.1:6379> zadd k1 1 m1 1 m2 1 m3 1 m4 1 m5 1 n1 1 n2 1 n3
(integer) 8
127.0.0.1:6379> zremrangebylex k1 [m [n1
(integer) 6
127.0.0.1:6379> zrange k1 0 -1
1) "n2"
2) "n3"

13、移除有序集合中给定的排名区间的所有成员

命令:zremrangebyrank
格式:zremrangebyrank key start stop

127.0.0.1:6379> zadd k1 1 a 2 b 3 c 4 d 5 e
(integer) 5
127.0.0.1:6379> zrange k1 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
127.0.0.1:6379> zremrangebyrank k1 2 3
(integer) 2
127.0.0.1:6379> zrange k1 0 -1
1) "a"
2) "b"
3) "e"

14、移除有序集合中给定的分数区间的所有成员

命令:zremrangebyscore
格式:zremrangebyscore key min max

127.0.0.1:6379> zadd k1 1 a 2 b 3 c 4 d 5 e
(integer) 5
127.0.0.1:6379> zrange k1 0 -1 withscores
 1) "a"
 2) "1"
 3) "b"
 4) "2"
 5) "c"
 6) "3"
 7) "d"
 8) "4"
 9) "e"
10) "5"
127.0.0.1:6379> zremrangebyscore k1 3 4
(integer) 2
127.0.0.1:6379> zrange k1 0 -1 withscores
1) "a"
2) "1"
3) "b"
4) "2"
5) "e"
6) "5"

15、返回有序集中指定区间内的成员,通过索引,分数从高到低

命令:zrevrange
格式:zrevrange key start stop [WITHSCORES]

127.0.0.1:6379> zadd k1 1 a 2 b 3 c 4 d 5 e
(integer) 5
127.0.0.1:6379> zrevrange k1 1 3
1) "d"
2) "c"
3) "b"
127.0.0.1:6379> zrevrange k1 1 3 withscores
1) "d"
2) "4"
3) "c"
4) "3"
5) "b"
6) "2"
127.0.0.1:6379> zrange k1 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"

16、返回有序集中指定分数区间内的成员,分数从高到低排序

命令:zrevrangebyscore
格式:zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count]

127.0.0.1:6379> zrange k1 0 -1 withscores
 1) "a"
 2) "1"
 3) "b"
 4) "2"
 5) "c"
 6) "3"
 7) "d"
 8) "4"
 9) "e"
10) "5"
127.0.0.1:6379> zrevrangebyscore k1 5 3 
1) "e"
2) "d"
3) "c"
127.0.0.1:6379> zrevrangebyscore k1 5 3 withscores
1) "e"
2) "5"
3) "d"
4) "4"
5) "c"
6) "3"
127.0.0.1:6379> zrevrangebyscore k1 5 3 withscores limit 2 1
1) "c"
2) "3"

17、返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序

命令:zrevrank
格式:zrevrank key member

127.0.0.1:6379> zrange k1 0 -1 withscores
 1) "a"
 2) "1"
 3) "b"
 4) "2"
 5) "c"
 6) "3"
 7) "d"
 8) "4"
 9) "e"
10) "5"
127.0.0.1:6379> zrevrank k1 a
(integer) 4
127.0.0.1:6379> zrevrank k1 b
(integer) 3
127.0.0.1:6379> zrevrank k1 c
(integer) 2
127.0.0.1:6379> zrevrank k1 d
(integer) 1
127.0.0.1:6379> zrevrank k1 e
(integer) 0

18、返回有序集中,成员的分数值

命令:zscore
格式:zscore key member

127.0.0.1:6379> zrange k1 0 -1 withscores
 1) "a"
 2) "1"
 3) "b"
 4) "2"
 5) "c"
 6) "3"
 7) "d"
 8) "4"
 9) "e"
10) "5"
127.0.0.1:6379> zscore k1 a
"1"
127.0.0.1:6379> zscore k1 b
"2"
127.0.0.1:6379> zscore k1 c
"3"
127.0.0.1:6379> zscore k1 d
"4"
127.0.0.1:6379> zscore k1 e
"5"

19、计算给定的一个或多个有序集的并集,并存储在新的 key 中

命令:zunionstore
格式:zunionstore des numbers key1 [key2] …

127.0.0.1:6379> zadd k1 1 a 2 b 3 c
(integer) 3
127.0.0.1:6379> zadd k2 1 a 2 c 3 e
(integer) 3
127.0.0.1:6379> zadd k3 1 a 2 e 3 f
(integer) 3
127.0.0.1:6379> zunionstore d1 2 k1 k2
(integer) 4
127.0.0.1:6379> zrange d1 0 -1 withscores
1) "a"
2) "2"
3) "b"
4) "2"
5) "e"
6) "3"
7) "c"
8) "5"
127.0.0.1:6379> zunionstore d2 3 k1 k2 k3
(integer) 5
127.0.0.1:6379> zrange d2 0 -1 withscores
 1) "b"
 2) "2"
 3) "a"
 4) "3"
 5) "f"
 6) "3"
 7) "c"
 8) "5"
 9) "e"
10) "5"

20、迭代有序集合中的元素(包括元素成员和元素分值)

命令:zscan
格式:zscan key cursor [MATCH pattern] [COUNT count]

127.0.0.1:6379> zadd k1 1 m1 2 m2 3 m3 4 m4 5 m5 6 member1 7 member2 8 member3 9 member4 10 member5
(integer) 10
127.0.0.1:6379> zrange k1 0 -1 withscores
 1) "m1"
 2) "1"
 3) "m2"
 4) "2"
 5) "m3"
 6) "3"
 7) "m4"
 8) "4"
 9) "m5"
10) "5"
11) "member1"
12) "6"
13) "member2"
14) "7"
15) "member3"
16) "8"
17) "member4"
18) "9"
19) "member5"
20) "10"
127.0.0.1:6379> zscan k1 0 match m*
1) "0"
2)  1) "m1"
    2) "1"
    3) "m2"
    4) "2"
    5) "m3"
    6) "3"
    7) "m4"
    8) "4"
    9) "m5"
   10) "5"
   11) "member1"
   12) "6"
   13) "member2"
   14) "7"
   15) "member3"
   16) "8"
   17) "member4"
   18) "9"
   19) "member5"
   20) "10"
127.0.0.1:6379> zscan k1 0 match me*
1) "0"
2)  1) "member1"
    2) "6"
    3) "member2"
    4) "7"
    5) "member3"
    6) "8"
    7) "member4"
    8) "9"
    9) "member5"
   10) "10"

七、操作数据库命令

1、dbsize 返回当前数据库中key的数目

127.0.0.1:6379> dbsize
(integer) 23

2、info 返回redis数据库状态信息

3、flushdb 清空当前数据库中所有的键

4、flushall 清空所有数据中所有的key

八、操作key的常用命令

1、keys * 取出所有key

127.0.0.1:6379> keys *
 1) "k3"
 2) "key4"
 3) "key2"
 4) "test_key"
 5) "des"
 6) "key1"
 7) "name"
 8) "k2"
 9) "src"
10) "key5"
11) "key3"
12) "float_key"
13) "rand_set"
14) "d2"
15) "list_key"
16) "d1"
17) "l2"
18) "hash_key"
19) "int_key"
20) "d3"
21) "k1"
22) "d5"
23) "d4"
24) "set_key"

2、keys d* 模糊匹配

127.0.0.1:6379> keys d*
1) "des"
2) "d2"
3) "d1"
4) "d3"
5) "d5"
6) "d4"

3、exists name 有name键 返回1 否则返回0

127.0.0.1:6379> exists d1
(integer) 1
127.0.0.1:6379> exists d10
(integer) 0

4、del key1 删除一个key 成功返回1 否则返回0

127.0.0.1:6379> del key5
(integer) 1
127.0.0.1:6379> del key5
(integer) 0

5、expire key1 100 设置key1 100s后过期

前面的 setex key 10 value 可以直接设置时间和值

127.0.0.1:6379> set name wangxiaoyu
OK
#设置过期时间为5s
127.0.0.1:6379> expire name 5
(integer) 1
127.0.0.1:6379> get name
"wangxiaoyu"
#5s后
127.0.0.1:6379> get name
(nil)

6、ttl key 查看键 还有多少时间过期,单位s;

当key不存在时,返回-2.
当key存在但没有设置剩余剩余时间 -1
否则返回key的剩余生存时间

#直接使用setex设置键值和过期时间
127.0.0.1:6379> setex name 10 wangxiaoyu
OK
#查看还有多久过期
127.0.0.1:6379> ttl name
(integer) 7
127.0.0.1:6379> ttl name
(integer) 5
127.0.0.1:6379> ttl name
(integer) -2

7、select 0 代表选择当前数据库,默认进入0数据库

127.0.0.1:6379> select 0
OK
127.0.0.1:6379> keys *
 1) "k3"
 2) "key4"
 3) "key2"
 4) "test_key"
 5) "des"
 6) "key1"
 7) "k2"
 8) "src"
 9) "key3"
10) "float_key"
11) "rand_set"
12) "d2"
13) "list_key"
14) "d1"
15) "l2"
16) "hash_key"
17) "int_key"
18) "d3"
19) "k1"
20) "d5"
21) "d4"
22) "set_key"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)

8、move name 1把name移动到1数据库

#设置name键值
127.0.0.1:6379> set name wangxiaoyu
OK
127.0.0.1:6379> get name
"wangxiaoyu"

#将name键移动到数据库1
127.0.0.1:6379> move name 1
(integer) 1
127.0.0.1:6379> get name
(nil)

#切换数据库1然后查看
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
1) "name"
127.0.0.1:6379[1]> get name
"wangxiaoyu"

9、persist key 取消key的过期时间

#设置过期时间20s
127.0.0.1:6379> setex name 20 wangxiaoyu
OK
127.0.0.1:6379> ttl name
(integer) 16
127.0.0.1:6379> ttl name
(integer) 14

#取消key过期时间
127.0.0.1:6379> persist name
(integer) 1
#再查看已经没有过期时间了
127.0.0.1:6379> ttl name
(integer) -1

10、randomkey 随机返回一个key

127.0.0.1:6379> randomkey
"k2"
127.0.0.1:6379> randomkey
"rand_set"
127.0.0.1:6379> randomkey
"d1"

11、rename oldname newname 重命名key

127.0.0.1:6379> get name
"wangxiaoyu"
#重命名key
127.0.0.1:6379> rename name newname
OK
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> get newname
"wangxiaoyu

12、type key1 返回键key1的类型

127.0.0.1:6379> type name
string
127.0.0.1:6379> type hash_key
hash
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值