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 12345@qq.com
(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) "12345@qq.com"
------------ 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) "12345@qq.com"
------------ 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使用场景
- 存储班级成绩表,工资表
- 普通消息,重要消息,带权重进行判断
- 排行榜应用实现
|