Redis(三)------五大数据类型、三种特殊数据类型
-
Redis是一个开源的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件MQ
-
它支持多种类型的数据结构,如:字符串(String)、散列(Hashes)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets)与范围查询,基数统计(Hyperloglogs),位图场景(Bitmaps)和地理空间(Geospatial)索引半径查询
-
Redis内置了复制(Replication)、LUA脚本(Lua Scripting)、LRU驱动事件(LRU Eviction)、事务(Transactions)和不同级别的磁盘持久化
5、Redis-Key
127 .0.0.1:6379> keys *
(empty list or set)
127 .0.0.1:6379> set name zzz
OK
127 .0.0.1:6379> keys *
1 ) "name"
127 .0.0.1:6379> set age 1
OK
127 .0.0.1:6379> keys *
1 ) "age"
2 ) "name"
127 .0.0.1:6379> EXISTS name
(integer) 1
127 .0.0.1:6379> EXISTS name1
(integer) 0
127 .0.0.1:6379> move name 1
(integer) 1
127 .0.0.1:6379> keys *
1 ) "age"
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
"zzz"
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> keys *
1) "age"
127.0.0.1:6379> set name zzz
OK
127.0.0.1:6379> keys *
1) "age"
2) "name"
127.0.0.1:6379> get name
"zzz"
127.0.0.1:6379> EXPIRE name 10
(integer) 1
127.0.0.1:6379> ttl name
(integer) 4
127.0.0.1:6379> ttl name
(integer) 3
127.0.0.1:6379> ttl name
(integer) 2
127.0.0.1:6379> ttl name
(integer) 1
127.0.0.1:6379> ttl name
(integer) -2
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> type name
string
127.0.0.1:6379> type age
string
6、五大数据类型
6.1 String类型
6.1.1 基本用法
命令 |
描述 |
set key value |
设置值 |
get key |
获得值 |
key * |
获得所有key |
EXISTS key |
判断key是否存在,1存在,0不存在 |
APPEND key “字符串” |
追加字符串,key不存在为set key value |
STRLEN key |
获取字符串长度 |
incr key |
自增1 |
decr key |
自减1 |
INCRBY key 增加量 |
批量增加 |
DECRBY key 减少量 |
批量减少 |
------------ SET GET ------------
127.0.0.1:6379> set name zzz
127.0.0.1:6379> get name
127.0.0.1:6379> keys *
------------ EXIST ------------
127.0.0.1:6379> EXISTS name
(integer) 1
------------ APPEND ------------
127.0.0.1:6379> APPEND name "hehe"
(integer) 7
127.0.0.1:6379> get name
"zzzhehe"
------------ STRLEN ------------
127.0.0.1:6379> STRLEN name
(integer) 7
127.0.0.1:6379> set views 0
OK
127.0.0.1:6379> get views
"0"
------------ incr ------------
127.0.0.1:6379> incr views
(integer) 1
127.0.0.1:6379> incr views
(integer) 2
127.0.0.1:6379> get views
"2"
------------ decr ------------
127.0.0.1:6379> decr views
(integer) 1
127.0.0.1:6379> decr views
(integer) 0
127.0.0.1:6379> decr views
(integer) -1
127.0.0.1:6379> get views
"-1"
------------ INCRBY ------------
127.0.0.1:6379> INCRBY views 10
(integer) 9
127.0.0.1:6379> INCRBY views 10
(integer) 19
------------ DECRBY ------------
127.0.0.1:6379> DECRBY views 5
(integer) 14
6.1.2 字符串范围range
命令 |
描述 |
GETRANGE key n1 n2 |
截取字符串[n1,n2] |
GETRANGE key 0 -1 |
获取全部字符串,相当于get key |
SETRANGE key n 字符串 |
替换n开始的字符串,写多少换多少 |
127.0.0.1:6379> set key1 "hello,zzz"
OK
------------ GETRANGE ------------
127.0.0.1:6379> GETRANGE key1 0 3
"hell"
127.0.0.1:6379> GETRANGE key1 0 -1
"hello,zzz"
------------ SETRANGE ------------
127.0.0.1:6379> set key2 abcdefg
OK
127.0.0.1:6379> get key2
"abcdefg"
127.0.0.1:6379> SETRANGE key2 1 xx
(integer) 7
127.0.0.1:6379> get key2
"axxdefg"
6.1.3 设置set的过期时间
命令 |
描述 |
setex key n vlaue |
设置key值为value,n秒后过期 |
setnx key “字符串” |
如果不存在,再设置key值为字符串,成功返回1,失败0,如果存在创建失败 |
ttl key |
查看过期时间 |
mset k1 v1 k2 v2 k3 v3… |
同时设置多个值 |
mget k1 k2 k3… |
同时获取多个值 |
msetnx k1 v1 k4 v4 |
若都不存在,同时创建,为原子性操作,一起成功或一起失败 |
getset key value |
先get再set,不存在则创建,存在则替换原值 |
key:{id}:{field} value |
例如:user:1:name zzz,一号user的name为zzz |
setex (set with expire)
setnx (set if not exist)
ttl key
------------ SETEX ------------
127.0.0.1:6379> SETEX key3 10 zzz
OK
------------ SETNX ------------
127.0.0.1:6379> SETNX mykey "redis"
(integer) 1
127.0.0.1:6379> keys *
1) "key2"
2) "mykey"
3) "key1"
------------ mset ------------
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
------------ mget ------------
127 .0.0.1:6379> mget k1 k2 k3
1 ) "v1"
2 ) "v2"
3 ) "v3"
------------ msetnx ------------
127.0.0.1:6379> msetnx k1 v1 k4 v4
(integer) 0
127.0.0.1:6379> get k4
(nil)
127.0.0.1:6379> mset user:1:name zzz user:1:age 18
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "zzz"
2) "18"
------------ getset ------------
127.0.0.1:6379> getset db redis
(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"
6.1.4 String使用场景
- value除了是字符串还可以是数字
- 计数器
- 统计多单位的数量
- 粉丝数
- 对象缓存存储
6.2 List(列表)
6.2.1 基本用法
命令 |
描述 |
LPUSH/RPUSH key value1[value2] |
从左/右向列表PUSH值(一个或多个) |
LRANGE key n1 n2 |
截取list起止元素(索引从左往右递增),[0,-1]获取所有值 |
LLEN key |
查看列表长度 |
LINDEX key n |
通过索引获取列表n号元素 |
LSET key n value |
通过索引更新列表n号元素值 |
LPOP/RPOP key |
从最左/最右移除值,并返回移除值 |
RPOPLPUSH 现list名 新list名 |
将列表最右值弹出,并返回,添加到另一个列表头部 |
BRPOPLPUSH 现list名 新list名 timeout |
将列表最右值弹出,并返回,添加到另一个列表头部。如果列表没有元素会阻塞列表,直到等待超时或发现可弹出元素为止 |
LTRIM key n1 n2 |
截取[n1,n2]范围内列表 |
LREM key n value |
n>0:从头部开始搜索,删除指定value,至多删除n个。n<0:从尾部开始搜索,删除指定value,至多删除-n个。n=0:删除列表中所有指定的value |
BLPOP/BRPOP key1[key2] timeout |
移出并获取列表第一/最后一个元素,如果列表没有元素阻塞会阻塞,直到等待超时或发现可弹出元素为止 |
LINSERT key BEFORE/AFTER “目标值” “插入值” |
在key列表中,目标值元素前/后插入指定插入值 |
------------ LPUSH RPUSH ------------
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
------------ LRANGE ------------
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"
3) "one"
4) "right"
------------ LPOP RPOP ------------
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"
------------ Lindex ------------
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"
------------ Llen key ------------
127.0.0.1:6379> Llen list
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> lrem list 1 one
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "two"
127.0.0.1:6379> lrem list 2 three
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "two"
------------ ltrim ------------
127.0.0.1:6379> rpush mylist hello hello1 hello2 hello3
(integer) 4
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "hello1"
3) "hello2"
4) "hello3"
127.0.0.1:6379> LTRIM mylist 1 2
OK
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello1"
2) "hello2"
------------ RPOPLPUSH ------------
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "hello1"
3) "hello2"
4) "hello3"
127.0.0.1:6379> RPOPLPUSH mylist mylistnew
"hello3"
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "hello1"
3) "hello2"
127.0.0.1:6379> LRANGE mylistnew 0 -1
1) "hello3"
------------ lset ------------
127.0.0.1:6379> exists list
(integer) 0
127.0.0.1:6379> lset list 0 value
(error) ERR no such key
127.0.0.1:6379> lpush list value1
(integer) 1
127.0.0.1:6379> lrange list 0 0
1) "value1"
127.0.0.1:6379> lset list 0 item
OK
127.0.0.1:6379> lrange list 0 0
1) "item"
127.0.0.1:6379> lset list 1 other
(error) ERR index out of range
------------ linsert ------------
127.0.0.1:6379> rpush mylist "hello" "world"
(integer) 2
127.0.0.1:6379> linsert mylist before "world" "new"
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "new"
3) "world"
127.0.0.1:6379> linsert mylist after "world" "!"
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "new"
3) "world"
4) "!"
- 在两边插入或改动值,效率最高,修改中间元素,效率相对较低
- 如果移除所有值,代表列表不存在
6.2.2 List使用场景
- 消息排队
- 消息队列(Lpush,Rpop)
- 栈(Lpush,Lpop)
6.3 Set(集合)
6.3.1 基本用法
命令 |
描述 |
SADD key member1 member2 … |
向集合中无序增加一个/多个成员 |
SCARD key |
获取集合的成员数 |
SMEMBERS key |
返回集合中的所有成员 |
SISMEMBER key member |
查询member元素是否是集合成员,结果是无序的 |
SRANDMEMBER key n |
随机返回集合中n个成员,n默认值为1 |
SPOP key n |
随机移除n个成员并返回删除成员,n默认值为1 |
SMOVE 原集合 新集合 member |
将原集合中的成员member移动到新集合中 |
SREM key member1 member2… |
移除集合中一个/多个成员 |
SDIFF key1 key2… |
返回所有集合的差集【只返回key1相对于其他集合的不同】(key1,key2中不同的成员),只有一个参数默认和自身运算 |
SDIFFSTORE 新集合名 key1 key2… |
在SIDFF基础上,将差集结果保存到新集合中(覆盖原数据),不能保存到其他类型key |
SINTER key1 key2… |
返回所有集合交集(key1,key2中相同元素),只有一个参数默认和自身运算 |
SINTERSTORE 新集合名 key1 key2… |
在SINTER基础上,将交集保存到新集合中(覆盖原数据),不能保存其他类型key |
SUNION key1 key2… |
返回所有集合并集(key1,key2中不重复的所有元素),只有一个参数默认和自身运算 |
SUNIONSTORE 新集合名 key1 key2… |
在SUNION基础上,将并集保存到新集合中(覆盖原数据),不能保存其他类型key |
------------ SADD SCARD SMEMBERS SISMEMBER ------------
127.0.0.1:6379> SADD myset m1 m2 m3 m4
(integer) 4
127.0.0.1:6379> SCARD myset
(integer) 4
127.0.0.1:6379> smembers myset
1) "m4"
2) "m3"
3) "m2"
4) "m1"
127.0.0.1:6379> SISMEMBER myset m5
(integer) 0
127.0.0.1:6379> SISMEMBER myset m2
(integer) 1
------------ SRANDMEMBER SPOP ------------
127.0.0.1:6379> SRANDMEMBER myset 3
1) "m2"
2) "m3"
3) "m4"
127.0.0.1:6379> SPOP myset 2
1) "m1"
2) "m4"
------------ SMOVE SREM ------------
127.0.0.1:6379> SMOVE myset newset m3
(integer) 1
127.0.0.1:6379> SMEMBERS myset
1) "m4"
2) "m2"
3) "m1"
127.0.0.1:6379> SMEMBERS newset
1) "m3"
127.0.0.1:6379> SREM newset m3
(integer) 1
127.0.0.1:6379> SMEMBERS newset
(empty list or set)
------------ SDIFF ------------
127.0.0.1:6379> SDIFF setx sety setz
1) "m4"
127.0.0.1:6379> SDIFF setx sety
1) "m4"
2) "m1"
127.0.0.1:6379> SDIFF sety setx
1) "m5"
------------ SINTER ------------
127.0.0.1:6379> SINTER setx sety setz
1) "m6"
127.0.0.1:6379> SINTER setx sety
1) "m2"
2) "m6"
------------ SUNION ------------
127.0.0.1:6379> SUNION setx sety setz
1) "m4"
2) "m6"
3) "m3"
4) "m2"
5) "m1"
6) "m5"
127.0.0.1:6379> SUNION setx sety
1) "m4"
2) "m6"
3) "m2"
4) "m1"
5) "m5"
6.3.2 Set使用场景
- 微博,将A用户,B用户关注用户放在不同集合中,查看共同关注
6.4 Hash(哈希)
- Redis Hash是一个String类型的field(字段)和value的映射表,hash特别适用于存储对象。(key-value都是字段-行数据)
- Set就是一种简化的Hash,只变动key,而value使用默认值填充(就像java的set和hashmap一样),可以将一个Hash表作为一个对象进行存储,表中存放对象的信息
6.4.1 基本用法
命令 |
描述 |
HSET key field value |
将哈希表key中的字段field的值设置为value。重复设置同一个field会覆盖,返回值0 |
HMSET key field1 v1 field2 v2 … |
同时设置多个字段值(field1-v1,field2-v2) |
HSETNX key field value |
当哈希表中字段不存在时,设置字段值 |
HEXISTS key field |
查看哈希表中,field字段是否存在 |
HGET key field |
获取存储在哈希表中指定字段值 |
HMGET key field1 field2… |
批量获取存储在哈希表中指定字段的值 |
HGETALL key |
获取该哈希表中所有的字段和值 |
HKEYS key |
获取该哈希表中的所有字段 |
HLEN key |
获取该哈希表中字段的数量 |
HVALS key |
获取该哈希表中的所有值 |
HDEL key field1 field2… |
删除该哈希表中一个/多个字段 |
HINCRBY key field n |
给该哈希表中指定字段的整数值加上n,并返回增加后的结果。值适用于整数字段 |
HINCRBYFLOAT key field n |
给该哈希表中指定字段的浮点数值加上n,并返回增加后的结果。只使用于浮点数字段 |
------------ HSET HMSET HSETNX ------------
127.0.0.1:6379> HSET studentx name mmm
(integer) 1
127.0.0.1:6379> HSET studentx name zzz
(integer) 0
127.0.0.1:6379> HSET studentx age 20
(integer) 1
127.0.0.1:6379> HMSET studentx sex 1 tel 12345678910
OK
127.0.0.1:6379> HSETNX studentx name zzz
(integer) 0
127.0.0.1:6379> HSETNX studentx email [email protected]
(integer) 1
------------ HEXISTS ------------
127.0.0.1:6379> HEXISTS studentx name
(integer) 1
127.0.0.1:6379> HEXISTS studentx abc
(integer) 0
------------ HGET HMGET HGETALL ------------
127.0.0.1:6379> HGET studentx name
"zzz"
127.0.0.1:6379> HMGET studentx name age tel
1) "zzz"
2) "20"
3) "12345678910"
127.0.0.1:6379> HGETALL studentx
1) "name"
2) "zzz"
3) "age"
4) "20"
5) "sex"
6) "1"
7) "tel"
8) "12345678910"
9) "email"
10) "[email protected]"
------------ HKEYS HLEN HVALS ------------
127.0.0.1:6379> HKEYS studentx
1) "name"
2) "age"
3) "sex"
4) "tel"
5) "email"
127.0.0.1:6379> HLEN studentx
(integer) 5
127.0.0.1:6379> HVALS studentx
1) "zzz"
2) "20"
3) "1"
4) "12345678910"
5) "[email protected]"
------------ HDEL ------------
127.0.0.1:6379> HDEL studentx sex tel
(integer) 2
127.0.0.1:6379> HKEYS studentx
1) "name"
2) "age"
3) "email"
------------ HINCRBY HINCRBYFLOAT ------------
127.0.0.1:6379> HINCRBY studentx age 1
(integer) 21
127.0.0.1:6379> HINCRBY studentx name 1
(error) ERR hash value is not an integer
127.0.0.1:6379> HINCRBYFLOAT studentx weight 0.6
"50.6"
6.4.2 Hash使用场景
- Hash适合用来存储对象,尤其时用户信息之类的,经常变动的信息
- String更适合字符串存储
6.5 Zset(有序集合)
6.5.1 基本用法
命令 |
描述 |
ZADD key score1 member1 score2 member2… |
向有序集合中添加一个/多个成员,或更新已存在成员分数 |
ZCARD key |
获取该有序集合成员数 |
ZCOUNT key min max |
计算该有序集合在[min,max]区间上的成员数 |
ZINCRBY key n member |
对该有序集合中指定成员的分数加n |
ZSCORE key member |
返回该有序集合中,成员的分数值 |
ZRANK key member |
返回该有序集合中成员的索引 |
ZRANGE key n1 n2 |
返回[n1,n2]区间内的成员 |
ZRANGEBYLEX key n1 n2 |
通过字典区间[n1,n2]返回有序集合的成员 |
ZRANGEBYSCORE key n1 n2 |
返回分数区间[n1,n2]内的成员,开区间 |
ZLEXCOUNT key n1 n2 |
在该有序集合中,计算字典区间[n1,n2]内成员数量 |
ZREM key member1 member2… |
移除该有序集合中一个/多个成员 |
ZREMRANGEBYLEX key n1 n2 |
移除该有序集合中给定字典区间[n1,n2]内所有成员 |
ZREMRANGEBYRANK key n1 n2 |
移除该有序集合给定排名区间[n1,n2]内所有成员 |
ZREMRANGEBYSCORE key n1 n2 |
移除该有序集合给定分数区间[n1,n2]内所有成员 |
ZREVRANGE key n1 n2 |
分数由高到低排序,再通过当前索引,返回该有序集合中索引指定区间[n1,n2]内的成员,分数由高到低 |
ZREVRANGEBYSCORE key n1 n2 |
分数由高到低排序,返回该有序集合中指定分数区间[n1,n2]内的成员, |
ZREVRANGEBYLEX key n1 n2 |
字典倒序排序,返回该有序集合中指定字典区间[n1,n2]的成员 |
ZREVRANK key member |
分数从高到低排序,返回该有序集合中指定成员的排名 |
ZINTERSTORE 新有序集合名 n key1 key2… |
计算给定一个或多个有序集合的交集,并将结果存在新有序集合中,n:参与运算有序集合数。相同成员的score相加存入交集 |
ZUNIONSTORE 新有序集合名 n key1 key2… |
计算给定的一个/多个有序集合的并集,并将结果存在新有序集合中,n:参与运算有序集合数。相同成员的score取最小值存入并集 |
------------ ZADD ZCARD ZCOUNT ------------
127.0.0.1:6379> ZADD myzset 1 m1 2 m2 3 m3
(integer) 2
127.0.0.1:6379> ZCARD myzset
(integer) 2
127.0.0.1:6379> ZCOUNT myzset 0 1
(integer) 1
------------ ZINCRBY ZSCORE ------------
127.0.0.1:6379> ZINCRBY myzset 5 m2
"7"
127.0.0.1:6379> ZSCORE myzset m1
"1"
------------ ZRANK ZRANGE ------------
127.0.0.1:6379> ZRANK myzset m1
(integer) 0
127.0.0.1:6379> ZRANK myzset m2
(integer) 2
127.0.0.1:6379> ZRANGE myzset 0 1
1) "m1"
2) "m3"
127.0.0.1:6379> ZRANGE myzset 0 -1
1) "m1"
2) "m3"
3) "m2"
------------ ZRANGEBYLEX ------------
127.0.0.1:6379> zadd testset 0 abc 0 add 0 amaze 0 apple 0 back 0 java 0 redis
(integer) 7
127.0.0.1:6379> ZRANGEBYLEX testset - +
1) "abc"
2) "add"
3) "amaze"
4) "apple"
5) "back"
6) "java"
7) "redis"
127.0.0.1:6379> ZRANGEBYLEX testset - + LIMIT 0 3
1) "abc"
2) "add"
3) "amaze"
127.0.0.1:6379> ZRANGEBYLEX testset - + LIMIT 3 3
1) "apple"
2) "back"
3) "java"
127.0.0.1:6379> ZRANGEBYLEX testset (- [apple
1) "abc"
2) "add"
3) "amaze"
4) "apple"
127.0.0.1:6379> ZRANGEBYLEX testset [apple [java
1) "apple"
2) "back"
3) "java"
127.0.0.1:6379> ZRANGEBYLEX testset (- (apple
1) "abc"
2) "add"
3) "amaze"
------------ ZREM ZREMRANGEBYLEX ZREMRANGBYRANK ZREMRANGEBYSCORE ------------
127.0.0.1:6379> ZREM testset abc
(integer) 1
127.0.0.1:6379> ZREMRANGEBYLEX testset [apple [java
(integer) 3
127.0.0.1:6379> ZREMRANGEBYRANK testset 0 1
(integer) 2
127.0.0.1:6379> ZREMRANGEBYSCORE myzset 0 3
(integer) 2
------------ ZREVRANGE ZREVRANGEBYSCORE ZREVRANGEBYLEX ------------
127.0.0.1:6379> zadd myset 1 m1 2 m2 3 m3 4 m4 7 m7 9 m9
127.0.0.1:6379> ZRANGE myset 0 -1
1) "m1"
2) "m2"
3) "m3"
4) "m4"
5) "m7"
6) "m9"
127.0.0.1:6379> ZREVRANGE myset 0 3
1) "m9"
2) "m7"
3) "m4"
4) "m3"
127.0.0.1:6379> ZREVRANGE myset 2 4
1) "m4"
2) "m3"
3) "m2"
127.0.0.1:6379> ZREVRANGEBYSCORE myset 6 2
1) "m4"
2) "m3"
3) "m2"
127.0.0.1:6379> ZREVRANGEBYSCORE myset 2 6
(empty list or set)
127.0.0.1:6379> ZREVRANGEBYLEX testset [java (add
1) "java"
2) "back"
3) "apple"
4) "amaze"
------------ 补充 ------------
127.0.0.1:6379> ZRANGE testset 0 -1
1) "java"
2) "redis"
127.0.0.1:6379> ZADD testset 0 hehe 0 xixi
(integer) 2
127.0.0.1:6379> ZRANGE testset 0 -1
1) "hehe"
2) "java"
3) "redis"
4) "xixi"
127.0.0.1:6379> ZADD testset 1 aaa
(integer) 1
127.0.0.1:6379> ZRANGE testset 0 -1
1) "hehe"
2) "java"
3) "redis"
4) "xixi"
5) "aaa"
------------ ZREVRANK ------------
127.0.0.1:6379> ZREVRANK myset m7
(integer) 1
127.0.0.1:6379> ZREVRANK myset m2
(integer) 4
------------ ZINTERSTORE ZUNIONSTORE ------------
127.0.0.1:6379> ZRANGE mathscore 0 -1
1) "xg"
2) "xm"
3) "xh"
127.0.0.1:6379> ZRANGE enscore 0 -1
1) "xm"
2) "xg"
3) "xh"
127.0.0.1:6379> ZRANGE enscore 0 -1 withscores
1) "xm"
2) "70"
3) "xg"
4) "90"
5) "xh"
6) "93"
127.0.0.1:6379> ZINTERSTORE sumscore 2 mathscore enscore
(integer) 3
127.0.0.1:6379> ZRANGE sumscore 0 -1 withscores
1) "xm"
2) "160"
3) "xg"
4) "177"
5) "xh"
6) "188"
127.0.0.1:6379> ZUNIONSTORE lowestscore 2 mathscore enscore AGGREGATE MIN
(integer) 3
127.0.0.1:6379> ZRANGE lowestscore 0 -1 withscores
1) "xm"
2) "70"
3) "xg"
4) "87"
5) "xh"
6) "93"
6.5.2 Zset使用场景
- 存储班级成绩表,工资表
- 普通消息,重要消息,带权重进行判断
- 排行榜应用实现