Redis五大数据类型
Redis-Key
官网:https://www.redis.net.cn/order/
序号 | 命令语法 | 描述 |
---|---|---|
1 | DEL key | 该命令用于在 key 存在时删除 key |
2 | DUMP key | 序列化给定 key ,并返回被序列化的值 |
3 | EXISTS key | 检查给定 key 是否存在,存在返回1,否则返回0 |
4 | EXPIRE key seconds | 为给定 key 设置过期时间,以秒计 |
5 | EXPIREAT key timestamp | EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳 |
6 | PEXPIRE key milliseconds | 设置 key 的过期时间以毫秒计 |
7 | PEXPIREAT key milliseconds-timestamp | 设置 key 过期时间的时间戳(unix timestamp) 以毫秒计 |
8 | KEYS pattern | 查找所有符合给定模式( pattern)的 key |
9 | MOVE key db | 将当前数据库的 key 移动到给定的数据库 db 当中 |
10 | PERSIST key | 移除 key 的过期时间,key 将持久保持 |
11 | PTTL key | 以毫秒为单位返回 key 的剩余的过期时间 |
12 | TTL key | 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live) |
13 | RANDOMKEY | 从当前数据库中随机返回一个 key |
14 | RENAME key newkey | 修改 key 的名称 |
15 | RENAMENX key newkey | 仅当 newkey 不存在时,将 key 改名为 newkey |
16 | SCAN cursor [MATCH pattern] [COUNT count] | 迭代数据库中的数据库键 |
17 | TYPE key | 返回 key 所储存的值的类型 |
18 | SELECT db | 选择数据库 数据库为0-15(默认一共16个数据库) |
19 | DBSIZE | 查看数据库的key数量 |
20 | FLUSHDB | 清空当前数据库 |
21 | FLUSHALL | 清空所有数据库 |
22 | ECHO | 打印命令 |
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> select 0
OK
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> set name zs
OK
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379> exists name
(integer) 1
127.0.0.1:6379> move name 1
(integer) 1
127.0.0.1:6379> keys *
1) "age"
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379> clear
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379> expire name 10
(integer) 1
127.0.0.1:6379> ttl name
(integer) 5
127.0.0.1:6379>
String(字符串)
Redis 字符串数据类型的相关命令用于管理 redis 字符串值
String 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。
String 类型是二进制安全的,意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
String 类型是 Redis 最基本的数据类型,String 类型的值最大能存储 512MB。
String类型一般用于缓存、限流、计数器、分布式锁、分布式Session。
Redis 字符串命令
下表列出了常用的 redis 字符串命令:
序号 | 命令语法 | 描述 |
---|---|---|
1 | SET key value | 设置指定 key 的值 |
2 | GET key | 获取指定 key 的值 |
3 | GETRANGE key start end | 返回 key 中字符串值的子字符,end=-1时表示全部 |
4 | SETBIT key offset value | 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit) |
5 | GETBIT key offset | 对 key 所储存的字符串值,获取指定偏移量上的位(bit) |
6 | MSET key value [key value …] | 同时设置一个或多个 key-value 对 |
7 | MGET key1 [key2…] | 获取所有(一个或多个)给定 key 的值 |
8 | GETSET key value | 将给定 key 的值设为 value ,并返回 key 的旧值(old value) |
9 | SETEX key seconds value | 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位) |
10 | SETNX key value | 只有在 key 不存在时设置 key 的值 |
11 | SETRANGE key offset value | 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始 |
12 | STRLEN key | 返回 key 所储存的字符串值的长度 |
13 | MSETNX key value [key value …] | 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在 |
14 | PSETEX key milliseconds value | 与 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间 |
15 | INCR key | 将 key 中储存的数字值增一 |
16 | INCRBY key increment | 将 key 所储存的值加上给定的增量值(increment) |
17 | INCRBYFLOAT key increment | 将 key 所储存的值加上给定的浮点增量值(increment) |
18 | DECR key | 将 key 中储存的数字值减一 |
19 | DECRBY key decrement | key 所储存的值减去给定的减量值(decrement) |
20 | APPEND key value | 如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值 value 的末尾 |
实例:
127.0.0.1:6379> set key1 v1 #设置值
OK
127.0.0.1:6379> get key1 # 获取值
"v1"
127.0.0.1:6379> exists key1 # 判断key是否存在
(integer) 1
127.0.0.1:6379> append key1 "hello" # 追加字符串 如果当前key不存在,则相当于set key
(integer) 7
127.0.0.1:6379> get key1
"v1hello"
127.0.0.1:6379> strlen key
(integer) 0
127.0.0.1:6379> strlen key1
(integer) 7
127.0.0.1:6379> append key1 "redis"
(integer) 12
127.0.0.1:6379> strlen key1
(integer) 12
127.0.0.1:6379>
127.0.0.1:6379> set views 0
OK
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> incr views # 将 key 中储存的数字值增一
(integer) 1
127.0.0.1:6379> get views
"1"
127.0.0.1:6379> decr views # 将 key 中储存的数字值减一
(integer) 0
127.0.0.1:6379> incrby views 10 # 将 key 所储存的值加上给定的增量值(increment)
(integer) 10
127.0.0.1:6379> decrby views 5 # key 所储存的值减去给定的减量值(decrement)
(integer) 5
127.0.0.1:6379> set key1 "hello,redis"
OK
127.0.0.1:6379> get key1
"hello,redis"
127.0.0.1:6379> getrange key1 0 5 # 返回 key 中字符串值的子字符,[0,5],end=-1时表示全部
"hello,"
127.0.0.1:6379> set key2 asdfgh
OK
127.0.0.1:6379> get key2
"asdfgh"
127.0.0.1:6379> setrange key2 1 xx # 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始
(integer) 6
127.0.0.1:6379> get key2
"axxfgh"
127.0.0.1:6379> setex key3 30 "hello" # 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)
OK
127.0.0.1:6379> ttl key3
(integer) 22
127.0.0.1:6379> setnx mykey "redis" # 只有在 key 不存在时设置 key 的值
(integer) 1
127.0.0.1:6379> setnx mykey "mongodb"
(integer) 0
127.0.0.1:6379> get mykey
"redis"
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 # 同时设置多个值
OK
127.0.0.1:6379> mget k1 k2 k3 # 同时获取多个值
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> msetnx k1 v1 k4 v4 # msetnx 是原子性的操作
(integer) 0
127.0.0.1:6379> get k4
(nil)
127.0.0.1:6379> mset user:1:name zhangsan user:1:age 20
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "zhangsan"
2) "20"
127.0.0.1:6379> getset db redis # getset如果不存在值则返回nil,存在则先返回当前的值,在设置新的值
(nil)
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> getset db mongodb
"redis"
127.0.0.1:6379> get db
"mongodb"
List(列表)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
List类型一般用于关注人、简单队列等。
所有list命令都是l开头的
序号 | 命令语法 | 描述 |
---|---|---|
1 | LPUSH key value1 [value2] | 将一个或多个值插入到列表头部 |
2 | LPOP key | 移出并获取列表的第一个元素 |
3 | LRANGE key start stop | 获取列表指定范围内的元素 |
4 | LPUSHX key value | 将一个值插入到已存在的列表头部 |
5 | RPUSH key value1 [value2] | 在列表中添加一个或多个值 |
6 | RPOP key | 移除列表的最后一个元素,返回值为移除的元素 |
7 | RPUSHX key value | 为已存在的列表添加值 |
8 | LLEN key | 获取列表长度 |
9 | LINSERT key BEFORE|AFTER pivot value | 在列表的元素前或者后插入元素 |
10 | LINDEX key index | 通过索引获取列表中的元素 |
11 | LSET key index value | 通过索引设置列表元素的值 |
12 | LREM key count value | 移除列表元素 |
13 | LTRIM key start stop | 对一个列表进行修剪,即让列表只保留指定区间内的元素, 不在指定区间之内的元素都将被删除 |
14 | BLPOP key1 [key2 ] timeout | 移出并获取列表第一个元素,如果列表没有元素会阻塞列表 直到等待超时或发现可弹出元素为止 |
15 | BRPOP key1 [key2 ] timeout | 移出并获取列表最后一个元素,如果列表没有元素会阻塞列表 直到等待超时或发现可弹出元素为止 |
16 | BRPOPLPUSH source destination timeout | 将列表中弹出的元素插入到另外一个列表中并返回 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止 |
17 | RPOPLPUSH source destination | 移除列表最后一个元素,并将该元素添加到另一个列表并返回 |
实例
127.0.0.1:6379> lpush list one # 将一个或者多个值插入到列表的头部(左)
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lrange list 0 1
1) "three"
2) "two"
127.0.0.1:6379> rpush list right # 将一个或者多个值插入到列表的尾部(右)
(integer) 4
127.0.0.1:6379> lrange list 0 1 # 通过区间获取具体的值
1) "three"
2) "two"
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
127.0.0.1:6379> lpop list # 移除第一个元素
"three"
127.0.0.1:6379> rpop list # 移除最后一个元素
"right"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
127.0.0.1:6379> lindex list 1 # 通过下标获取某一个值
"one"
127.0.0.1:6379> lindex list 0
"two"
127.0.0.1:6379> llen list # 返回列表的长度
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lpush list three
(integer) 4
127.0.0.1:6379> lrem list 1 two # 移除指定个数的value,精确匹配
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "one"
127.0.0.1:6379> lrem list 1 three
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "one"
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lrem list 2 three
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "one"
127.0.0.1:6379> lpush mylist "hello"
(integer) 1
127.0.0.1:6379> lpush mylist "hello1"
(integer) 2
127.0.0.1:6379> lpush mylist "hello12"
(integer) 3
127.0.0.1:6379> lpush mylist "hello13"
(integer) 4
127.0.0.1:6379> ltrim mylist 1 2 # 通过下标截取指定的长度,list已经被改变,只剩下截取的元素了!
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "hello12"
2) "hello1"
127.0.0.1:6379> rpush mylist "hello"
(integer) 1
127.0.0.1:6379> rpush mylist "hello1"
(integer) 2
127.0.0.1:6379> rpush mylist "hello2"
(integer) 3
127.0.0.1:6379> rpoplpush mylist myotherlist # 移除列表的最后一个元素,将他移动到新的列表中
"hello2"
127.0.0.1:6379> lrange mylist 0 -1 # 查看原来列表
1) "hello"
2) "hello1"
127.0.0.1:6379> lrange myotherlist 0 -1 # 查看新的列表中确实存在
1) "hello2"
127.0.0.1:6379> exists list
(integer) 0
127.0.0.1:6379> lset list 0 item
(error) ERR no such key
127.0.0.1:6379> lpush list value1
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "value1"
127.0.0.1:6379> lset list 0 item # 将列表中的指定下标的值替换为另一个值,更新操作,如果不存在列表去更新就会报错。存在就更新当前下标的值
OK
127.0.0.1:6379> lrange list 0 -1
1) "item"
127.0.0.1:6379> lpush mylist "hello"
(integer) 1
127.0.0.1:6379> lpush mylist "world"
(integer) 2
127.0.0.1:6379> linsert mylist before "world" "other" # 将某个具体的value插入到某个元素的前面或者后面
(integer) 3
127.0.0.1:6379> lrange list 0 -1
(empty array)
127.0.0.1:6379> lrange mylist 0 -1
1) "other"
2) "world"
3) "hello"
127.0.0.1:6379> linsert mylist after "world" "new"
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "other"
2) "world"
3) "new"
4) "hello"
小结
-
他实际上是一个链表,before Node after , left , right 都可以插入值如果key不存在,创建新的链表
-
如果key存在,新增内容
-
如果移除了所有值,空链表,也代表不存在!
-
在两边插入或者改动值,效率最高!中间元素,相对来说效率会低一点~
消息排队!消息队列( Lpush Rpop ) ,栈( Lpush Lpop )
set(集合)
Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
Set类型一般用于赞、踩、标签、好友关系等。
序号 | 命令语法 | 描述 |
---|---|---|
1 | SADD key member1 [member2] | 向集合添加一个或多个成员 |
2 | SMEMBERS key | 返回集合中的所有成员 |
3 | SCARD key | 获取集合的成员数 |
4 | SRANDMEMBER key [count] | 返回集合中一个或多个随机数 |
5 | SISMEMBER key member | 判断 member 元素是否是集合 key 的成员 |
6 | SREM key member1 [member2] | 移除集合中一个或多个成员 |
7 | SDIFF key1 [key2] | 返回给定所有集合的差集 |
8 | SDIFFSTORE destination key1 [key2] | 返回给定所有集合的差集并存储在 destination 中 |
9 | SINTER key1 [key2] | 返回给定所有集合的交集 |
10 | SINTERSTORE destination key1 [key2] | 返回给定所有集合的交集并存储在 destination 中 |
11 | SUNION key1 [key2] | 返回所有给定集合的并集 |
12 | SUNIONSTORE destination key1 [key2] | 所有给定集合的并集存储在 destination 集合中 |
13 | SMOVE source destination member | 将 member 元素从 source 集合移动到 destination 集合 |
14 | SPOP key | 移除并返回集合中的一个随机元素 |
15 | SSCAN key cursor [MATCH pattern] [COUNT count] | 迭代集合中的元素 |
实例:
127.0.0.1:6379> sadd myset "hello" # set集合中添加值
(integer) 1
127.0.0.1:6379> sadd myset "zs"
(integer) 1
127.0.0.1:6379> smembers myset # 查看指定set的所有值
1) "hello"
2) "zs"
127.0.0.1:6379> sismember myset "hello" # 判断某一个值是不是在set集合中
(integer) 1
127.0.0.1:6379> sismember myset "world"
(integer) 0
127.0.0.1:6379> scard myset # 获取set集合中的内容元素个数
(integer) 3
127.0.0.1:6379> srem myset hello # 移除set中指定元素
(integer) 1
127.0.0.1:6379> scard myset
(integer) 2
127.0.0.1:6379> smembers myset
1) "zs"
2) "lisi"
127.0.0.1:6379> srandmember myset # 随机抽选出元素
"zs"
127.0.0.1:6379> srandmember myset
"lisi"
127.0.0.1:6379> srandmember myset
"lisi"
127.0.0.1:6379> srandmember myset 2 # 随机抽选出指定个数元素
1) "zs"
2) "lisi"
127.0.0.1:6379> spop myset # 随机删除set中的一些元素
"lisi2"
127.0.0.1:6379> sadd myset2 set2
(integer) 1
127.0.0.1:6379> smove myset myset2 lisi # 将一个指定的值,移动到另外一个set集合中
(integer) 1
127.0.0.1:6379> smembers myset2
1) "set2"
2) "lisi"
127.0.0.1:6379> sadd key1 a
(integer) 1
127.0.0.1:6379> sadd key1 b
(integer) 1
127.0.0.1:6379> sadd key1 c
(integer) 1
127.0.0.1:6379> sadd key2 c
(integer) 1
127.0.0.1:6379> sadd key2 d
(integer) 1
127.0.0.1:6379> sadd key2 e
(integer) 1
127.0.0.1:6379> sdiff key1 key2 # 差集
1) "a"
2) "b"
127.0.0.1:6379> sinter key1 key2 # 交集
1) "c"
127.0.0.1:6379> sunion key1 key2 # 并集
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
微博,A用户将所有关注的人放在一个set集合中!将它的粉丝也放在一个集合中!
共同关注,共同爱好,二度好友(六度分割理论)
Hash(哈希)
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
Map集合,key-map!时候这个值是一个map集合! 本质和String类型没有太大区别,还是一个简单的key-vlaue !
Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
序号 | 命令语法 | 描述 |
---|---|---|
1 | HSET key field value | 将哈希表 key 中的字段 field 的值设为 value |
2 | HGET key field | 获取存储在哈希表中指定字段的值 |
3 | HGETALL key | 获取在哈希表中指定 key 的所有字段和值 |
4 | HEXISTS key field | 查看哈希表 key 中,指定的字段是否存在 |
5 | HSETNX key field value | 只有在字段 field 不存在时,设置哈希表字段的值 |
6 | HKEYS key | 获取所有哈希表中的字段 |
7 | HVALS key | 获取哈希表中所有值 |
8 | HLEN key | 获取哈希表中字段的数量 |
9 | HMGET key field1 [field2] | 获取所有给定字段的值 |
10 | HMSET key field1 value1 [field2 value2] | 同时将多个 field-value (域-值)对设置到哈希表 key 中 |
11 | HINCRBY key field increment | 为哈希表 key 中的指定字段的整数值加上增量 increment |
12 | HINCRBYFLOAT key field increment | 为哈希表 key 中的指定字段的浮点数值加上增量 increment |
13 | HDEL key field1 [field2] | 删除一个或多个哈希表字段 |
14 | HSCAN key cursor [MATCH pattern] [COUNT count] | 迭代哈希表中的键值对 |
实例:
127.0.0.1:6379> hset myhash filed1 zhangsan # set一个具体的key-value
(integer) 1
127.0.0.1:6379> hget myhash filed1 # 获取一个字段值
"zhangsan"
127.0.0.1:6379> hmset myhash filed1 hello filed2 world # set多个key-value
OK
127.0.0.1:6379> hmget myhash filed1 filed2 # 获取多个字段值
1) "hello"
2) "world"
127.0.0.1:6379> hgetall myhash # 获取全部的数据
1) "filed1"
2) "hello"
3) "filed2"
4) "world"
127.0.0.1:6379> hdel myhash filed1 # 删除hash指定的key字段,对应的value也没了
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "filed2"
2) "world"
127.0.0.1:6379> hdel myhash filed1
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "filed2"
2) "world"
127.0.0.1:6379> hlen myhash
(integer) 1
127.0.0.1:6379> hmset myhash filed1 hello
OK
127.0.0.1:6379> hlen myhash # 获取hash表的字段数量
(integer) 2
127.0.0.1:6379> hgetall myhash
1) "filed2"
2) "world"
3) "filed1"
4) "hello"
127.0.0.1:6379> hexists myhash filed1 # 判断hash中的字段是否存在
(integer) 1
127.0.0.1:6379> hexists myhash filed3
(integer) 0
127.0.0.1:6379> hkeys myhash # 获取所有的字段
1) "filed2"
2) "filed1"
127.0.0.1:6379> hvals myhash # 获取所有的值
1) "world"
2) "hello"
127.0.0.1:6379> hset myhash filed3 5 # 指定增量
(integer) 1
127.0.0.1:6379> hincrby myhash filed3 1
(integer) 6
127.0.0.1:6379> hincrby myhash filed3 -1
(integer) 5
127.0.0.1:6379> hsetnx myhash filed4 hello # 若不存在则可设置
(integer) 1
127.0.0.1:6379> hsetnx myhash filed4 world # 若存在则不可设置
(integer) 0
hash变更的数据user name age,尤其是是用户信息之类的,经常变动的信息! hash更适合于对象的存储,String更加适合字符串存储!
Zset(有序集合)
Redis 有序集合(sorted set)
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
Zset类型一般用于排行榜等。
序号 | 命令语法 | 描述 |
---|---|---|
1 | ZADD key score1 member1 [score2 member2] | 向有序集合添加一个或多个成员,或者更新已存在成员的分数 |
2 | ZCARD key | 获取有序集合的成员数 |
3 | ZCOUNT key min max | 计算在有序集合中指定区间分数的成员数 |
4 | ZINCRBY key increment member | 有序集合中对指定成员的分数加上增量 increment |
5 | ZLEXCOUNT key min max | 在有序集合中计算指定字典区间内成员数量 |
6 | ZRANGE key start stop [WITHSCORES] | 通过索引区间返回有序集合指定区间内的成员 |
7 | ZRANGEBYLEX key min max [LIMIT offset count] | 通过字典区间返回有序集合的成员 |
8 | ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] | 通过分数返回有序集合指定区间内的成员 |
9 | ZRANK key member | 返回有序集合中指定成员的索引 |
10 | ZREM key member [member …] | 移除有序集合中的一个或多个成员 |
11 | ZREMRANGEBYLEX key min max | 移除有序集合中给定的字典区间的所有成员 |
12 | ZREMRANGEBYRANK key start stop | 移除有序集合中给定的排名区间的所有成员 |
13 | ZREMRANGEBYSCORE key min max | 移除有序集合中给定的分数区间的所有成员 |
14 | ZREVRANGE key start stop [WITHSCORES] | 返回有序集中指定区间内的成员,通过索引,分数从高到低 |
15 | ZREVRANGEBYSCORE key max min [WITHSCORES] | 返回有序集中指定分数区间内的成员,分数从高到低排序 |
16 | ZREVRANK key member | 返回有序集合中指定成员的排名, 有序集成员按分数值递减(从大到小)排序 |
17 | ZSCORE key member | 返回有序集中,成员的分数值 |
18 | ZINTERSTORE destination numkeys key [key …] | 计算给定的一个或多个有序集的交集 并将结果集存储在新的有序集合 key 中 |
19 | ZUNIONSTORE destination numkeys key [key …] | 计算给定的一个或多个有序集的并集,并存储在新的 key 中 |
20 | ZSCAN key cursor [MATCH pattern] [COUNT count] | 迭代有序集合中的元素(包括元素成员和元素分值) |
实例:
127.0.0.1:6379> zadd myset 1 one # 添加一个值
(integer) 1
127.0.0.1:6379> zadd myset 2 two
(integer) 1
127.0.0.1:6379> zadd myset 3 three 4 four # 添加多个值
(integer) 2
127.0.0.1:6379> zrange myset 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
# 排序实现
127.0.0.1:6379> zadd salary 2500 xiaohong # 添加三个用户
(integer) 1
127.0.0.1:6379> zadd salary 5500 zhangsan
(integer) 1
127.0.0.1:6379> zadd salary 8000 lisi
(integer) 1
127.0.0.1:6379> zrangebyscore salary -inf +inf # 显示全部用户 从小到大排序
1) "xiaohong"
2) "zhangsan"
3) "lisi"
127.0.0.1:6379> zrevrange salary 0 -1 # 显示全部用户 从大到小排序
1) "lisi"
2) "zhangsan"
127.0.0.1:6379> zrangebyscore salary -inf +inf withscores # 显示全部用户 并且附带成绩
1) "xiaohong"
2) "2500"
3) "zhangsan"
4) "5500"
5) "lisi"
6) "8000"
127.0.0.1:6379> zrangebyscore salary -inf 5000 withscores # 显示工资小于5000的用户升序 并且附带成绩
1) "xiaohong"
2) "2500"
127.0.0.1:6379> zrange salary 0 -1
1) "xiaohong"
2) "zhangsan"
3) "lisi"
127.0.0.1:6379> zrem salary xiaohong # 移除有序集合中的指定元素
(integer) 1
127.0.0.1:6379> zrange salary 0 -1
1) "zhangsan"
2) "lisi"
127.0.0.1:6379> zcard salary # 获取有序集合中的个数
(integer) 2
127.0.0.1:6379> zadd myset 1 hello 2 wolrd 3 zhangsan
(integer) 3
127.0.0.1:6379> zcount myset 1 3 # 获取指定区间成员的数量
(integer) 3