redis五大数据类型

26 篇文章 0 订阅

★五个数据类型

redis-key

在redis中无论什么数据类型,在数据库中都是以key-value形式保存,通过进行对Redis-key的操作,来完成对数据库中数据的操作。

下面学习的命令:

  • exists key:判断键是否存在
  • del key:删除键值对
  • move key db:将键值对移动到指定数据库 db为0,1,2…16
  • expire key second:设置键值对的过期时间 second 用数字 单位是秒
  • type key:查看value的数据类型
  • flushall:将全部数据库都清空 慎用!
  • flushdb:清空当前数据库
  • rename key newkey :修改 key 的名称
  • renamenx key newkey :仅当 newkey 不存在时,将 key 改名为 newkey
127.0.0.1:6379> keys * 					# 查看当前数据库所有key
(empty list or set)
127.0.0.1:6379> set name qinjiang 		# set key
OK
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> keys *
1) "age"
2) "name"
127.0.0.1:6379> move age 1 				# 将键值对移动到指定数据库
(integer) 1
127.0.0.1:6379> EXISTS age 				# 判断键是否存在
(integer) 0 # 不存在
127.0.0.1:6379> EXISTS name
(integer) 1 # 存在
127.0.0.1:6379> SELECT 1   				#把数据库转换为数据库1
OK
127.0.0.1:6379[1]> keys *
1) "age"
127.0.0.1:6379[1]> del age 				# 删除键值对
(integer) 1 # 删除个数


127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> EXPIRE age 15 			# 设置键值对的过期时间

(integer) 1 # 设置成功 开始计数	
127.0.0.1:6379> ttl age 				# 查看key的过期剩余时间
(integer) 13
127.0.0.1:6379> ttl age
(integer) 11
127.0.0.1:6379> ttl age
(integer) 9
127.0.0.1:6379> ttl age
(integer) -2 # -2 表示key过期,-1表示key未设置过期时间

127.0.0.1:6379> get age 				# 过期的key 会被自动delete
(nil)#即null
127.0.0.1:6379> keys *
1) "name"

127.0.0.1:6379> type name 				# 查看value的数据类型
string

String

使用场景:

  • 计数器
  • 统计多单位的数量
  • 粉丝数
  • 对象缓存储存

get、set

#############################################################
[root@chenmou ~]# redis-cli -p 6379			#连接redis
127.0.0.1:6379> set key1 v1				
OK
127.0.0.1:6379> get key1
"v1"
127.0.0.1:6379> key *						#不是key 是keys
(error) ERR unknown command 'key', with args beginning with: '*' 
127.0.0.1:6379> keys *
1) "key1"
127.0.0.1:6379> exists key1	
(integer) 1
127.0.0.1:6379> append key1 "hello"			#指定key追加字符
(integer) 7
127.0.0.1:6379> get key1
"v1hello"
127.0.0.1:6379> strlen key1					#输出指定key的长度
(integer) 7
127.0.0.1:6379> append key1 "kuangshen"
(integer) 16
127.0.0.1:6379> strlen key1
(integer) 16
127.0.0.1:6379> get key1
"v1hellokuangshen"
#############################################################

#i++
127.0.0.1:6379> set view 0					
OK
127.0.0.1:6379> get view
"0"
127.0.0.1:6379> incr view					#increase view  即自增一
(integer) 1
127.0.0.1:6379> incr view
(integer) 2
127.0.0.1:6379> decr view					#decrease view 即自减一
(integer) 1
127.0.0.1:6379> get view
"1"
127.0.0.1:6379> decr view
(integer) 0
127.0.0.1:6379> decr view
(integer) -1
127.0.0.1:6379> get view
"-1"
127.0.0.1:6379> incrby view 10				#指定增加多少  这里时增加10
(integer) 9
127.0.0.1:6379> incrby view 10
(integer) 19
127.0.0.1:6379> get view
"19"
127.0.0.1:6379> decrby view 10				#指定减少多少   这里是减少10
(integer) 9
127.0.0.1:6379> get view 
"9"


#############################################################
#字符串范围 range
127.0.0.1:6379> set key1 "hello cangjian"	
OK
127.0.0.1:6379> get key1
"hello cangjian"
127.0.0.1:6379> getrange key1 0 3			#截取指定key对应的value 0-3 
"hell"
127.0.0.1:6379> getrange key1 0 -1			#获得字符串  和get作用一致
"hello cangjian"
127.0.0.1:6379> set key2 abcdefg
OK
127.0.0.1:6379> get key2
"abcdefg"
#替换 setrange
127.0.0.1:6379> setrange key2 1 oo			#从 1 开始替换 
(integer) 7
127.0.0.1:6379> get key2
"aoodefg"


#############################################################
#setex(set with expire)		#设置过期时间
#setnx(set if not exist)	#不存在再设置(在分布式锁中常用)
127.0.0.1:6379> setex key3 30 "hello"		#创建并设置过期时间30秒后过期 如果创建已存在报错
OK
127.0.0.1:6379> ttl key3					#查看key的过期剩余时间
(integer) 25
127.0.0.1:6379> get key3
"hello"
127.0.0.1:6379> setnx mykey "redis"			#如果mykey不存在 创建mykey
(integer) 1
127.0.0.1:6379> keys *
1) "key1"
2) "mykey"
3) "view"
4) "key2"
5) "key3"
127.0.0.1:6379> ttl key3
(integer) -2
127.0.0.1:6379> setnx mykey "MongoDB"		#如果存在  创建失败
(integer) 0
127.0.0.1:6379> get mykey
"redis"



#############################################################
# mset
# mget
127.0.0.1:6379> clear
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3		#同时设置多个值
OK
127.0.0.1:6379> keys *
1) "k3"
2) "k1"
3) "k2"
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			#同时创建多个值  但是! 该动作是原子性动作 要么全部成功 要么全部失败
(integer) 0
127.0.0.1:6379> get k4
(nil)


#对象
127.0.0.1:6379> set user:1 {name:zs,age:3}	#创建一个user:1对象 里面有name age初始值
OK
127.0.0.1:6379> keys *
1) "k3"
2) "k1"
3) "user:1"
4) "k2"
127.0.0.1:6379> mset user:1:name ls user:1:age 2 #同时修改多个属性值 注意格式!!!
OK
127.0.0.1:6379> mget user:1 name user:1 age		#这个就是格式写错了!!!
1) "{name:zs,age:3}"
2) (nil)
3) "{name:zs,age:3}"
4) (nil)
127.0.0.1:6379> mget user:1:name user:1:age		#获取多个指定对象的属性
1) "ls"
2) "2"



#############################################################
#getset  先get后set
127.0.0.1:6379> getset db redis					#如果不存在值,则返回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中 , list 可以被完成 栈、队列、阻塞队列

# 插入lpush rpush  获取lrange  
# 弹出 lpop rpop
#根据下标查值 lrange
#查长度 llen
#移除指定的值 lrem 
#ltrim value value 修剪  
#rpoplpush  移除列表中的最后一个元素 , 将它移动到新的列表中
#lset 将列表中指定下标的值替换为另外一个值,更新操作
#linsert  将某个具体的value插入到列中某个元素的前面或者后面!


#############################################################
# 插入lpush rpush  获取lrange  
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		#获取list中的值
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> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
127.0.0.1:6379> lpop list			#移除list的第一个元素
"three"
127.0.0.1:6379> rpop list			#移除list的最后一个元素
"right"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"

#############################################################
#根据下标查值
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
127.0.0.1:6379> lindex list 0
"two"
127.0.0.1:6379> lindex list 1
"one"

#############################################################
#查长度
127.0.0.1:6379> lpush list one two three four
(integer) 4
127.0.0.1:6379> llen list			#返回list长度
(integer) 4


#############################################################
#移除指定的值 lrem
lrem
127.0.0.1:6379> lrange list 0 -1
1) "four"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> lpush list three
(integer) 5
127.0.0.1:6379> lrem list 1 one			#移除一个noe
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "four"
3) "three"
4) "two"
127.0.0.1:6379> lrem list 2 three		#移除两个three
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "four"
2) "two"


#############################################################
#ltrim 修剪    list 截断
127.0.0.1:6379> rpush mylist "hello" "hello1" "hello2" "hello3"
(integer) 4
127.0.0.1:6379> ltrim mylist 1 2			#通过下标截取指定的长度,这个list已经被改变了,截取之外的被删除。
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "hello1"
2) "hello2"

#############################################################
#rpoplpush  移除列表中的最后一个元素 , 将它移动到新的列表中
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 "hello2"
(integer) 3
127.0.0.1:6379> rpoplpush mylist myotherlist			#移除列表中的最后一个元素 , 将它移动到新的列表中
"hello"
127.0.0.1:6379> lrange mylist 0 -1
1) "hello2"
2) "hello1"
127.0.0.1:6379> lrange myotherlist 0 -1
1) "hello"

#############################################################
#lset 将列表中指定下标的值替换为另外一个值,更新操作
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 value
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "value"
127.0.0.1:6379> lset list 0 item			#如果存在  会替换掉指定的这个值
OK
127.0.0.1:6379> lrange list 0 -1
1) "item"

#############################################################
#linsert  将某个具体的value插入到列中某个元素的前面或者后面!
127.0.0.1:6379> rpush list "hello"
(integer) 1
127.0.0.1:6379> rpush list "world"
(integer) 2
127.0.0.1:6379> linsert list before "hello" "other"
(integer) 3
127.0.0.1:6379> lrange list 0 -1 
1) "other"
2) "hello"
3) "world"
127.0.0.1:6379> linsert list after "hello" "other"
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "other"
2) "hello"
3) "other"
4) "world"

小结

list实际上是一个链表,before Node after , left, right 都可以插入值

  • 如果key不存在,则创建新的链表

  • 如果key存在,新增内容

  • 如果移除了所有值,空链表,也代表不存在

在两边插入或者改动值,效率最高!修改中间元素,效率相对较低

应用:

消息排队!消息队列(Lpush Rpop),栈(Lpush Lpop)

Set

应用场景:

  • 微博 将所有关注的人放在一个set集合中 将它的粉丝也放在一个set中
  • 共同关注 、 共同爱好 、二度好友 、推荐好友(六度分割理论)

Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)

常见命令:

  • sadd key member1[member2…] 向集合中无序增加一个/多个成员
  • scard key 获取集合的成员数
  • smembers key 返回集合中所有的成员
  • sismember key member 查询member元素是否是集合的成员,结果是无序的
  • srandmember key [count] 随机返回集合中count个成员,count缺省值为1
  • spop key [count] 随机移除并返回集合中count个成员,count缺省值为1
  • smove source destination member 将source集合的成员member移动到destination集合
  • srem key member1[member2…] 移除集合中一个/多个成员
  • sdiff key1[key2…] 返回所有集合的差集 key1- key2 - …
  • sinsert key1 [key2…] 返回所有集合的交集
  • sunion key1 [key2…] 返回所有集合的并集
---------------SADD--SCARD--SMEMBERS--SISMEMBER--------------------

127.0.0.1:6379> SADD myset m1 m2 m3 m4 # 向myset中增加成员 m1~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 # 查询m5是否是myset的成员
(integer) 0 # 不是,返回0
127.0.0.1:6379> SISMEMBER myset m2
(integer) 1 # 是,返回1
127.0.0.1:6379> SISMEMBER myset m3
(integer) 1

---------------------SRANDMEMBER--SPOP----------------------------------

127.0.0.1:6379> SRANDMEMBER myset 3 # 随机返回3个成员
1) "m2"
2) "m3"
3) "m4"
127.0.0.1:6379> SRANDMEMBER myset # 随机返回1个成员
"m3"
127.0.0.1:6379> SPOP myset 2 # 随机移除并返回2个成员 返回的是移除的两个
1) "m1"
2) "m4"
# 将set还原到{m1,m2,m3,m4}

---------------------SMOVE--SREM----------------------------------------

127.0.0.1:6379> SMOVE myset newset m3 # 将myset中m3成员移动到newset集合
(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 # 从newset中移除m3元素
(integer) 1
127.0.0.1:6379> SMEMBERS newset
(empty list or set)

# 下面开始是多集合操作,多集合操作中若只有一个参数默认和自身进行运算
# setx=>{m1,m2,m4,m6}, sety=>{m2,m5,m6}, setz=>{m1,m3,m6}

-----------------------------SDIFF------------------------------------

127.0.0.1:6379> SDIFF setx sety setz # 等价于setx-sety-setz  取差集  留下不同的
1) "m4"
127.0.0.1:6379> SDIFF setx sety # setx - sety
1) "m4"
2) "m1"
127.0.0.1:6379> SDIFF sety setx # sety - setx
1) "m5"


-------------------------SINTER---------------------------------------
# 共同关注(交集)

127.0.0.1:6379> SINTER setx sety setz # 求 setx、sety、setx的交集
1) "m6"
127.0.0.1:6379> SINTER setx sety # 求setx sety的交集
1) "m2"
2) "m6"

-------------------------SUNION---------------------------------------

127.0.0.1:6379> SUNION setx sety setz # setx sety setz的并集
1) "m4"
2) "m6"
3) "m3"
4) "m2"
5) "m1"
6) "m5"
127.0.0.1:6379> SUNION setx sety # setx sety 并集
1) "m4"
2) "m6"
3) "m2"
4) "m1"
5) "m5"

Hash

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。

Set就是一种简化的Hash,只变动key,而value使用默认值填充。可以将一个Hash表作为一个对象进行存储,表中存放对象的信息。

  • hset key field value 将哈希表 key 中的字段 field 的值设为 value 。重复设置同一个field会覆盖,返回0
  • hmset key field1 value1 [field2 value2…] 同时将多个 field-value (域-值)对设置到哈希表 key 中。
  • hsetnx key field value 只有在字段 field 不存在时,设置哈希表字段的值。
  • hexists key field 查看哈希表 key 中,指定的字段是否存在。
  • hget key field value 获取存储在哈希表中指定字段的值
  • hmget key field1 [field2…] 获取所有给定字段的值
  • hgetall key 获取在哈希表key 的所有字段和值
  • hkeys key 获取哈希表key中所有的字段
  • hlen key 获取哈希表中字段的数量
------------------------HSET--HMSET--HSETNX----------------
127.0.0.1:6379> HSET studentx name sakura # 将studentx哈希表作为一个对象,设置name为sakura
(integer) 1
127.0.0.1:6379> HSET studentx name gyc # 重复设置field进行覆盖,并返回0
(integer) 0
127.0.0.1:6379> HSET studentx age 20 # 设置studentx的age为20
(integer) 1
127.0.0.1:6379> HMSET studentx sex 1 tel 15623667886 # 设置sex为1,tel为15623667886
OK
127.0.0.1:6379> HSETNX studentx name gyc # HSETNX 设置已存在的field
(integer) 0 # 失败
127.0.0.1:6379> HSETNX studentx email 12345@qq.com
(integer) 1 # 成功

----------------------HEXISTS--------------------------------
127.0.0.1:6379> HEXISTS studentx name # name字段在studentx中是否存在
(integer) 1 # 存在
127.0.0.1:6379> HEXISTS studentx addr
(integer) 0 # 不存在

-------------------HGET--HMGET--HGETALL-----------
127.0.0.1:6379> HGET studentx name # 获取studentx中name字段的value
"gyc"
127.0.0.1:6379> HMGET studentx name age tel # 获取studentx中name、age、tel字段的value
1) "gyc"
2) "20"
3) "15623667886"
127.0.0.1:6379> HGETALL studentx # 获取studentx中所有的field及其value
 1) "name"
 2) "gyc"
 3) "age"
 4) "20"
 5) "sex"
 6) "1"
 7) "tel"
 8) "15623667886"
 9) "email"
10) "12345@qq.com"


--------------------HKEYS--HLEN--HVALS--------------
127.0.0.1:6379> HKEYS studentx # 查看studentx中所有的field
1) "name"
2) "age"
3) "sex"
4) "tel"
5) "email"
127.0.0.1:6379> HLEN studentx # 查看studentx中的字段数量
(integer) 5
127.0.0.1:6379> HVALS studentx # 查看studentx中所有的value
1) "gyc"
2) "20"
3) "1"
4) "15623667886"
5) "12345@qq.com"

-------------------------HDEL--------------------------
127.0.0.1:6379> HDEL studentx sex tel # 删除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 # 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 # weight字段增加0.6
"90.8"

Zset

使用场景

  • 排行榜应用实现 取TOP N测试!
  • 工资表排序 成绩表排序
-------------------ZADD--ZCARD--ZCOUNT--------------
127.0.0.1:6379> ZADD myzset 1 m1 2 m2 3 m3 # 向有序集合myzset中添加成员m1 score=1 以及成员m2 score=2..
(integer) 2
127.0.0.1:6379> ZCARD myzset # 获取有序集合的成员数
(integer) 2
127.0.0.1:6379> ZCOUNT myzset 0 1 # 获取score在 [0,1]区间的成员数量
(integer) 1
127.0.0.1:6379> ZCOUNT myzset 0 2
(integer) 2

----------------ZINCRBY--ZSCORE--------------------------
127.0.0.1:6379> ZINCRBY myzset 5 m2 # 将成员m2的score +5
"7"
127.0.0.1:6379> ZSCORE myzset m1 # 获取成员m1的score
"1"
127.0.0.1:6379> ZSCORE myzset m2
"7"

--------------ZRANK--ZRANGE-----------------------------------
127.0.0.1:6379> ZRANK myzset m1 # 获取成员m1的索引,索引按照score排序,score相同索引值按字典顺序顺序增加
(integer) 0
127.0.0.1:6379> ZRANK myzset m2
(integer) 2
127.0.0.1:6379> ZRANGE myzset 0 1 # 获取索引在 0~1的成员
1) "m1"
2) "m3"
127.0.0.1:6379> ZRANGE myzset 0 -1 # 获取全部成员
1) "m1"
2) "m3"
3) "m2"

#testset=>{abc,add,amaze,apple,back,java,redis} score均为0
------------------ZRANGEBYLEX---------------------------------
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 # 分页 按索引显示查询结果的 0,1,2条记录
1) "abc"
2) "add"
3) "amaze"
127.0.0.1:6379> ZRANGEBYLEX testset - + LIMIT 3 3 # 显示 3,4,5条记录
1) "apple"
2) "back"
3) "java"
127.0.0.1:6379> ZRANGEBYLEX testset (- [apple # 显示 (-,apple] 区间内的成员
1) "abc"
2) "add"
3) "amaze"
4) "apple"
127.0.0.1:6379> ZRANGEBYLEX testset [apple [java # 显示 [apple,java]字典区间的成员
1) "apple"
2) "back"
3) "java"

-----------------------ZRANGEBYSCORE---------------------
127.0.0.1:6379> ZRANGEBYSCORE myzset 1 10 # 返回score在 [1,10]之间的的成员
1) "m1"
2) "m3"
3) "m2"
127.0.0.1:6379> ZRANGEBYSCORE myzset 1 5
1) "m1"
2) "m3"

--------------------ZLEXCOUNT-----------------------------
127.0.0.1:6379> ZLEXCOUNT testset - +
(integer) 7
127.0.0.1:6379> ZLEXCOUNT testset [apple [java
(integer) 3

------------------ZREM--ZREMRANGEBYLEX--ZREMRANGBYRANK--ZREMRANGEBYSCORE--------------------------------
127.0.0.1:6379> ZREM testset abc # 移除成员abc
(integer) 1
127.0.0.1:6379> ZREMRANGEBYLEX testset [apple [java # 移除字典区间[apple,java]中的所有成员
(integer) 3
127.0.0.1:6379> ZREMRANGEBYRANK testset 0 1 # 移除排名0~1的所有成员
(integer) 2
127.0.0.1:6379> ZREMRANGEBYSCORE myzset 0 3 # 移除score在 [0,3]的成员
(integer) 2


# testset=> {abc,add,apple,amaze,back,java,redis} score均为0
# myzset=> {(m1,1),(m2,2),(m3,3),(m4,4),(m7,7),(m9,9)}
----------------ZREVRANGE--ZREVRANGEBYSCORE--ZREVRANGEBYLEX-----------
127.0.0.1:6379> ZREVRANGE myzset 0 3 # 按score递减排序,然后按索引,返回结果的 0~3
1) "m9"
2) "m7"
3) "m4"
4) "m3"
127.0.0.1:6379> ZREVRANGE myzset 2 4 # 返回排序结果的 索引的2~4
1) "m4"
2) "m3"
3) "m2"
127.0.0.1:6379> ZREVRANGEBYSCORE myzset 6 2 # 按score递减顺序 返回集合中分数在[2,6]之间的成员
1) "m4"
2) "m3"
3) "m2"
127.0.0.1:6379> ZREVRANGEBYLEX testset [java (add # 按字典倒序 返回集合中(add,java]字典区间的成员
1) "java"
2) "back"
3) "apple"
4) "amaze"

-------------------------ZREVRANK------------------------------
127.0.0.1:6379> ZREVRANK myzset m7 # 按score递减顺序,返回成员m7索引
(integer) 1
127.0.0.1:6379> ZREVRANK myzset m2
(integer) 4


# mathscore=>{(xm,90),(xh,95),(xg,87)} 小明、小红、小刚的数学成绩
# enscore=>{(xm,70),(xh,93),(xg,90)} 小明、小红、小刚的英语成绩
-------------------ZINTERSTORE--ZUNIONSTORE-----------------------------------
127.0.0.1:6379> ZINTERSTORE sumscore 2 mathscore enscore # 将mathscore enscore进行合并 结果存放到sumscore
(integer) 3
127.0.0.1:6379> ZRANGE sumscore 0 -1 withscores # 合并后的score是之前集合中所有score的和
1) "xm"
2) "160"
3) "xg"
4) "177"
5) "xh"
6) "188"

127.0.0.1:6379> ZUNIONSTORE lowestscore 2 mathscore enscore AGGREGATE MIN # 取两个集合的成员score最小值作为结果的
(integer) 3
127.0.0.1:6379> ZRANGE lowestscore 0 -1 withscores
1) "xm"
2) "70"
3) "xg"
4) "87"
5) "xh"
6) "93"

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值