Redis 5大数据类型,及操作方式。

以下数据操作 参考博客:https://blog.csdn.net/u010476739/article/details/99490167

Redis

简介

Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

  • Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

  • Redis 与其他 key - value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

  • Redis支持数据的备份,即master-slave模式的数据备份。

优点

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。

  • 丰富的数据类型 – Redis支持二进制案例的 Strings,Lists,Hashes,Sets 及 Ordered Sets 数据类型操作。

  • 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。

  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

    1. 纯内存操作
    2. 单线程避免上下文切换
    3. 非阻塞IO多路复用机制

缺点

  • 内存限制,不能用作海量数据

Redis支持五种数据类型:

  • string(字符串)

  • hash(哈希)
    键值对、特别适合存储对象、键和值都是字符串

  • list(列表)
    字符串列表、链表结构

  • set(集合)
    字符串集合、非重复、无序、基于hash原理

  • zset(sorted set:有序集合)
    在set基础上添加了用于排序的权重属性

组织特点:
在这里插入图片描述


目录:



Key操作

redis 是一个 Key-Value数据库,先说说对 Key的操作

  1. 查看当前连接的是哪个数据库(redis默认有16个)
127.0.0.1:6500> select 1
OK

127.0.0.1:6500[1]> select 0
OK
  1. 切换当前使用的数据库:select 0

  2. 判断键“str-value”是否存在:exists str-key

127.0.0.1:6500> exists str-key
(integer) 0

127.0.0.1:6500> set str-key str-value
OK

127.0.0.1:6500> exists str-key
(integer) 1

存在返回1,不存在返回0

  1. 设置键“str-key”的值为“str-value”:set str-key str-value
127.0.0.1:6500> set str-key str-value
OK
  1. 判断键(str-key)存储的数据类型
127.0.0.1:6500> type str-key
string
  1. 新添加两个键,然后搜索
127.0.0.1:6500> set key1 "hello,redis"
OK

127.0.0.1:6500> set key2 "who are you"
OK

127.0.0.1:6500> keys *
"key2"
"key1"
"str-key"

127.0.0.1:6500> keys "*1*"
"key1"
  1. 给键“key2”设置过期时间,并查看剩余的逗留时间及过期效果
127.0.0.1:6500> keys *
"key2"
"key1"
"str-key"

127.0.0.1:6500> ttl key2
(integer) -1

127.0.0.1:6500> expire key2 30
(integer) 1

127.0.0.1:6500> ttl key2
(integer) 26

127.0.0.1:6500> ttl key2
(integer) 15

127.0.0.1:6500> get key2
"who are you?"

127.0.0.1:6500> ttl key2
(integer) 3

127.0.0.1:6500> ttl key2
(integer) -2

127.0.0.1:6500> get key2
(nil)

127.0.0.1:6500> keys *
"key1"
"str-key"

127.0.0.1:6500> 

可以看到key2在过期时间到了之后就被移除了,也就查不到了,并且ttl key2返回的是-2(表示的是不存在,也就是过期了被删除了),如果返回的是-1那么表示的是没有设置过期时间

  1. 移除过期时间:persist key1
127.0.0.1:6500> keys *
"key1"
"str-key"

127.0.0.1:6500> ttl key1
(integer) -1

127.0.0.1:6500> expire key1 60
(integer) 1

127.0.0.1:6500> ttl key1
(integer) 53

127.0.0.1:6500> persist key1
(integer) 1

127.0.0.1:6500> ttl key1
(integer) -1

127.0.0.1:6500> keys *
"key1"
"str-key"

可以看到,移除了设置的过期时间后ttl key1返回的是-1,表示没有设置过期时间

  1. 删除键:del str-key key1
127.0.0.1:6500> keys *
1) "key1"
2) "str-key"

127.0.0.1:6500> del str-key key1
(integer) 2

127.0.0.1:6500> keys *
(empty list or set)

  1. 清空当前数据库所有的键(flushdb)和获取当前数据库键的数目
127.0.0.1:6500> mset name xiaoming age 20
OK

127.0.0.1:6500> keys *
1) "age"
2) "name"

127.0.0.1:6500> dbsize
(integer) 2

127.0.0.1:6500> flushdb
OK

127.0.0.1:6500> dbsize
(integer) 0

127.0.0.1:6500> keys *
(empty list or set)

  1. 清空所有数据库的键
127.0.0.1:6500> mset name xiaoming age 20
OK

127.0.0.1:6500> keys *
1) "age"
2) "name"

127.0.0.1:6500> select 1
OK

127.0.0.1:6500[1]> mset name liubei age 42
OK

127.0.0.1:6500[1]> keys *
1) "age"
2) "name"

127.0.0.1:6500[1]> flushall
OK

127.0.0.1:6500[1]> keys *
(empty list or set)

127.0.0.1:6500[1]> select 0
OK

127.0.0.1:6500> keys *
(empty list or set)

127.0.0.1:6500> dbsize
(integer) 0

可以看到当执行完flushall之后所有数据库的键都清空了

  1. 显示服务器信息:info

  2. 显示所有连接到这个server的客户端:client list

127.0.0.1:6500> client list

id=3 addr=127.0.0.1:38380 fd=7 name= age=888 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 obl=0 oll=0 omem=0 events=r cmd=client

字符串操作

  1. 设置和获取字符串:set blog_title "this is a amazing girl!"和get blog_title
127.0.0.1:6500> set blog_title "this is a amazing girl!"
OK

127.0.0.1:6500> get blog_title
"this is a amazing girl!"

其实这里的设置是有则覆盖,没有就新建。

  1. 根据起始索引获取子字符串:getrange blog_title 2 3
127.0.0.1:6500> getrange blog_title 2 3
"is"
  1. 给字符串设置新值并返回之前的值:
127.0.0.1:6500> getset blog_title "haha this is a new title!"
"this is a amazing girl!"

127.0.0.1:6500> get blog_title
"haha this is a new title!"
  1. 新设置字符串键,并批量获取这些键:mget blog_user blog_title
127.0.0.1:6500> keys *
"blog_title"

127.0.0.1:6500> set blog_user "jackletter"
OK

127.0.0.1:6500> keys *
"blog_user"
"blog_title"

127.0.0.1:6500> mget blog_user blog_title
"jackletter"
"haha this is a new title!"
  1. 设置字符串的过期时间和值:setex blog_user 60 xiaoming
127.0.0.1:6500> setex blog_user 60 xiaoming
OK

127.0.0.1:6500> ttl blog_user
(integer) 51

127.0.0.1:6500> get blog_user
"xiaoming"

127.0.0.1:6500> persist blog_user
(integer) 1

127.0.0.1:6500> ttl blog_user
(integer) -1

127.0.0.1:6500> get blog_user
"xiaoming"
  1. 只有当字符串键不存在时才设置值:setnx blog_user nouser
127.0.0.1:6500> get blog_user
"xiaoming"

127.0.0.1:6500> setnx blog_user nouser
(integer) 0

127.0.0.1:6500> get blog_user
"xiaoming"

可以看到当blog_user 存在值的时候是没有设置进去的,这区别于set key value

  1. 返回字符串的长度:strlen blog_user
127.0.0.1:6500> get blog_user
"xiaoming"

127.0.0.1:6500> strlen blog_user
(integer) 8
  1. 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始(SETRANGE key offset value):setrange blog_user 4 new
127.0.0.1:6500> get blog_user
"xiaoming"

127.0.0.1:6500> setrange blog_user 4 new
(integer) 8

127.0.0.1:6500> get blog_user
"xiaonewg"
  1. 同时设置一个或多个 key-value 对:mset blog_time 2019-08-14 blog_theme redis-talking
127.0.0.1:6500> keys *
"blog_user"
"blog_title"

127.0.0.1:6500> mset blog_time 2019-08-14 blog_theme redis-talking
OK

127.0.0.1:6500> keys *
"blog_theme"
"blog_time"
"blog_user"
"blog_title"

  1. 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在:msetnx blog_time 2018-08-14 blog_theme redis-talking
127.0.0.1:6500> msetnx blog_time 2018-08-14 blog_theme redis-talking
(integer) 0

127.0.0.1:6500> get blog_time
"2019-08-14"

可以看到 blog_time的值并没有改变

  1. 字符串的递增和递减:incr testint和incrby testint 4、decr testint和decrby testint 4、incrbyfloat
testint 0.23

127.0.0.1:6500> set testint 5
OK

127.0.0.1:6500> get testint
"5"

127.0.0.1:6500> incr testint
(integer) 6

127.0.0.1:6500> get testint
"6"

127.0.0.1:6500> incrby testint 4
(integer) 10

127.0.0.1:6500> get testint
"10"

127.0.0.1:6500> decr testint
(integer) 9

127.0.0.1:6500> get testint
"9"

127.0.0.1:6500> decrby testint 4
(integer) 5

127.0.0.1:6500> get testint
"5"

127.0.0.1:6500> incrbyfloat testint 0.23
"5.23"

127.0.0.1:6500> get testint
"5.23"

  1. 字符串的追加:append blog_user " lalala"
127.0.0.1:6500> get blog_user
"xiaonewg"

127.0.0.1:6500> append blog_user " lalala"
(integer) 15

127.0.0.1:6500> get blog_user
"xiaonewg lalala"

127.0.0.1:6500> keys *
"blog_user"
"blog_time"
"blog_theme"
"blog_title"
"testint"

127.0.0.1:6500> append testnew "append new"
(integer) 10

127.0.0.1:6500> get testnew
"append new"

这里可以看出,append其实是有则追加末尾,否则新增


哈希操作

概念说明:
对于每一个以hash结果存储的都称之为一个哈希表,它里面的每个键值对都称之为域

  1. 存储、获取、批量存储与获取哈希表中的域
127.0.0.1:6500> hset user name xiaoming
(integer) 1

127.0.0.1:6500> hset user age 20
(integer) 1

127.0.0.1:6500> hset user addr tianminglu
(integer) 1

127.0.0.1:6500> hget user name
"xiaoming"

127.0.0.1:6500> hget user age
"20"

127.0.0.1:6500> hmget user name age addr
"xiaoming"
"20"
"tianminglu"

127.0.0.1:6500> hmset user name liubei addr taohuayuan
OK

127.0.0.1:6500> hmget user name age addr
"liubei"
"20"
"taohuayuan"

  1. 获取哈希表中的所有域:>hgetall
127.0.0.1:6500> hgetall user
"name"
"liubei"
"age"
"20"
"addr"
"taohuayuan"

  1. 获取哈希表中所有存储的域名:hkeys user
127.0.0.1:6500> hkeys user
"name"
"age"
"addr"

  1. 判断哈希表中是否存储了某个域:hexists key field
127.0.0.1:6500> hkeys user
"name"
"age"
"addr"

127.0.0.1:6500> hexists user name
(integer) 1

127.0.0.1:6500> hexists user no
(integer) 0
  1. 返回哈希表中域的数量:hlen user
127.0.0.1:6500> hkeys user
"name"
"age"
"addr"

127.0.0.1:6500> hlen user
(integer) 3
  1. 返回哈希表 user中所有域的值:hvals user
127.0.0.1:6500> hvals user
"liubei"
"20"
"taohuayuan"
  1. 删除哈希表 中的一个或多个指定域,不存在的域将被忽略:hdel user name addr no
127.0.0.1:6500> hkeys user
"name"
"age"
"addr"

127.0.0.1:6500> hdel user name addr no
(integer) 2

127.0.0.1:6500> hkeys user
"age"
  1. 将哈希表中的域 field 的值设置为 value ,当且仅当域 field 不存在:
127.0.0.1:6500> hkeys user
"age"

127.0.0.1:6500> hvals user
"20"

127.0.0.1:6500> hsetnx user age 18
(integer) 0

127.0.0.1:6500> hvals user
"20"

由此可看到,当age存在时并没有进行覆盖


列表操作

说明:

列表是链状结构的,操作时可以从左边(头)或右边操作(尾),以左边操作为主。每次push和pop数据就像是将数据压入和弹出一样。

  1. 从左边压入数据:127.0.0.1:6500
127.0.0.1:6500> lpush list a b c d
(integer) 4

127.0.0.1:6500> lrange list 0 4
"d"
"c"
"b"
"a"
  1. 从右边压入数据:127.0.0.1:6500>
127.0.0.1:6500> rpush list 1 2 3
(integer) 7

127.0.0.1:6500> lrange list 0 6
"d"
"c"
"b"
"a"
"1"
"2"
"3"
  1. 从左右两侧分别弹出数据
127.0.0.1:6500> lpop list
"d"

127.0.0.1:6500> rpop list
"3"

127.0.0.1:6500> lrange list 0 4
"c"
"b"
"a"
"1"
"2"
压入和弹出操作说明
  • 压入和弹出都是操作的时候就指明了从哪边(左还是右或头还是尾),不像js中数组的push和pop都-是从尾部操作的(从头部操作用的是shift:弹出,unshift:压入)

  • lrange命令是从左到右显示列表中的值(显示全部数据:lrange list 0 -1)
    操作的图解:
    在这里插入图片描述

  1. 获取列表的存储数量:llen list
127.0.0.1:6500> llen list
(integer) 5
  1. 根据索引值获取列表中的元素:lindex list -1
    说明: 索引为正数表示从左边开始,为负数表示从右边开始
127.0.0.1:6500> lrange list 0 10
"c"
"b"
"a"
"1"
"2"

127.0.0.1:6500> llen list
(integer) 5

127.0.0.1:6500> lindex list 0
"c"

127.0.0.1:6500> lindex list -1
"2"

  1. 插入数据:lLINSERT key BEFORE|AFTER pivot value
    将值 value 插入到列表 key 当中,位于值 pivot 之前或之后。
127.0.0.1:6500> lrange list 0 -1
"c"
"b"
"a"
"1"
"2"

127.0.0.1:6500> linsert list before a other
(integer) 6

127.0.0.1:6500> lrange list 0 -1
"c"
"b"
"other"
"a"
"1"
"2"

127.0.0.1:6500> linsert list after other op
(integer) 7

127.0.0.1:6500> lrange list 0 -1
"c"
"b"
"other"
"op"
"a"
"1"
"2"

  1. 更改list指定索引的值:lset list 3 new
127.0.0.1:6500> lrange list 0 -1
"c"
"b"
"other"
"op"
"a"
"1"
"2"

127.0.0.1:6500> lset list 3 new
OK

127.0.0.1:6500> lrange list 0 -1
"c"
"b"
"other"
"new"
"a"
"1"
"2"

  1. 只保留列表中指定其实索引的值,其他的删除:ltrim list 2 -2
127.0.0.1:6500> lrange list 0 -1
"c"
"b"
"other"
"new"
"a"
"1"
"2"

127.0.0.1:6500> ltrim list 2 -2
OK

127.0.0.1:6500> lrange list 0 -1
"other"
"new"
"a"
"1"
  1. 根据值移除列表中的元素(两种模式:移除几个或全部移除)
127.0.0.1:6500> lpush list a a a a
(integer) 4

127.0.0.1:6500> lrange list 0 -1
"a"
"a"
"a"
"a"

127.0.0.1:6500> lrem list 0 a
(integer) 4

127.0.0.1:6500> lrange list 0 -1
(empty list or set)

127.0.0.1:6500> lpush list a a a a
(integer) 4

127.0.0.1:6500> lrange list 0 -1
"a"
"a"
"a"
"a"

127.0.0.1:6500> lrem list 2 a
(integer) 2

127.0.0.1:6500> lrange list 0 -1
"a"
"a"

  • 如果要移除全部匹配的就是 lrem list 0 a
  • 如果要移除几个匹配的就是lrem list 2
  1. 当这个列表存在时才压入数据:lpushx list2 a或rpushx list2 c
127.0.0.1:6500> lpushx list2 a
(integer) 0

127.0.0.1:6500> keys *
(empty list or set)

127.0.0.1:6500> rpushx list2 c
(integer) 0

127.0.0.1:6500> keys *
(empty list or set)

  1. 将一个列表中的尾部数据移动到另一个列表的头部并返回这个值:
127.0.0.1:6500> keys *
(empty list or set)

127.0.0.1:6500> lpush list1 1 2 3 4
(integer) 4

127.0.0.1:6500> rpoplpush list1 list2
"1"

127.0.0.1:6500> keys *
"list2"
"list1"

127.0.0.1:6500> lrange list1 0 -1
"4"
"3"
"2"

127.0.0.1:6500> lrange list2 0 -1
"1"
  • 原列表和目的列表可以是相同的,这样就可以给列表“旋转”了
  • 列表的这种操作常用在消息队列上
  1. 阻塞弹出值:blpop list 60或brpop list1 list2 0

    说明: 对于空列表进行阻塞,标题上显示的是60秒的等待时间,如果无线等待就是“0”,也可以同时等待多个列表直到弹出第一个

    首先发起阻塞弹出命令:
    在这里插入图片描述

    可以看到窗口已经被阻塞了

    在另一个窗口进行数据压入:

    在这里插入图片描述

    最后观察阻塞窗口的效果:
    在这里插入图片描述

    可以看到阻塞的窗口已经完成了数据的弹出

  2. 阻塞的命令还有“brpop”、“brpoplpush”,类似“blpop”


集合(set)操作

注意: 集合的特点是不重复、无序

  1. 向集合中添加数据sadd set liubei guanyu zhangfei;显示集合数据smembers set;显示集合元素数量scard set
127.0.0.1:6500> keys *
(empty list or set)

127.0.0.1:6500> sadd set liubei guanyu zhangfei
(integer) 3

127.0.0.1:6500> scard set
(integer) 3

127.0.0.1:6500> smembers set
"guanyu"
"liubei"
"zhangfei"

127.0.0.1:6500> sadd set liubei
(integer) 0

127.0.0.1:6500> smembers set
"guanyu"
"liubei"
"zhangfei"
  1. 判断集合中是否存在某个元素:sismember set liubei
127.0.0.1:6500> smembers set
"guanyu"
"liubei"
"zhangfei"

127.0.0.1:6500> sismember set liubei
(integer) 1

127.0.0.1:6500> sismember set xiaoming
(integer) 0
  1. 求集合交集:sinter set set2;求交集并以覆盖的方式存储到另外一个集合:sinterstore set3 set
    注意: set3已经被交集覆盖了,即使交集的结果为空也会覆盖(相当于删除了)
set2

127.0.0.1:6500> smembers set
"guanyu"
"liubei"
"zhangfei"

127.0.0.1:6500> smembers set2
"huangzhong"
"liubei"
"zhuge"

127.0.0.1:6500> smembers set3
"xiaoming"

127.0.0.1:6500> smembers inter
(empty list or set)

127.0.0.1:6500> sinter set set2
"liubei"

127.0.0.1:6500> sinterstore set3 set set2
(integer) 1

127.0.0.1:6500> smembers set3
"liubei"
  1. 求差集(第一个集合减去后面的集合):sdiff set set2 set3;求差集并且存储:sdiffstore set4 set
set2 set3

127.0.0.1:6500> smembers set
"c"
"b"
"a"

127.0.0.1:6500> smembers set2
"1"
"a"

127.0.0.1:6500> smembers set3
"2"
"b"

127.0.0.1:6500> smembers set4
(empty list or set)

127.0.0.1:6500> sdiff set set2 set3
"c"

127.0.0.1:6500> sdiffstore set4 set set2 set3
(integer) 1

127.0.0.1:6500> smembers set4
"c"

注意:这个差集存储也是覆盖型的

  1. 求并集:sunion set set2;求并集并存储:sunionstore set3 set set2
127.0.0.1:6500> smembers set
"1"
"2"

127.0.0.1:6500> smembers set2
"b"
"a"

127.0.0.1:6500> smembers set3
(empty list or set)

127.0.0.1:6500> sunion set set2
"1"
"a"
"b"
"2"

127.0.0.1:6500> sunionstore set3 set set2
(integer) 4

127.0.0.1:6500> smembers set3
"1"
"a"
"b"
"2"

注意:这个并集的存储也是覆盖型的

  1. 移除集合中的元素:srem set 1
127.0.0.1:6500> smembers set
"1"
"2"

127.0.0.1:6500> srem set 1
(integer) 1

127.0.0.1:6500> smembers set
"2"
  1. 移动集合1中的元素到集合2中:smove set set2 1
127.0.0.1:6500> smembers set
"1"
"2"

127.0.0.1:6500> smembers set2
"b"
"a"

127.0.0.1:6500> smove set set2 1
(integer) 1

127.0.0.1:6500> smembers set
"2"

127.0.0.1:6500> smembers set2
"1"
"b"
"a"

有序集合

说明:
有序集合的权重又称之为score,它可以是整数的也可以是浮点型的

  1. 添加数据:zadd sortset 1.2 liubei 3.5 zhangfei 2.1 guanyu;查看数据:zrange sortset 0 -1 widthscores;获取集合存储数据数量:zcard sortset
127.0.0.1:6500> zadd sortset 1.2 liubei 3.5 zhangfei 2.1 guanyu
(integer) 3

127.0.0.1:6500> zrange sortset 0 -1 withscores
"liubei"
"1.2"
"guanyu"
"2.1000000000000001"
"zhangfei"
"3.5"

127.0.0.1:6500> zrange sortset 0 -1
"liubei"
"guanyu"
"zhangfei"

127.0.0.1:6500> zcard sortset
(integer) 3
  1. 统计score在某一区间内的元素数量:zcount sortset 2 3.5
127.0.0.1:6500> zrange sortset 0 -1 withscores
"liubei"
"1.2"
"guanyu"
"2.1000000000000001"
"zhangfei"
"3.5"

127.0.0.1:6500> zcount sortset 2 3.5
(integer) 2
  1. 返回有序集中,成员的分数值:zscore sortset liubei
127.0.0.1:6500> zrange sortset 0 -1 withscores
"liubei"
"1.2"
"guanyu"
"2.1000000000000001"
"zhangfei"
"3.5"

127.0.0.1:6500> zscore sortset liubei
"1.2"
  1. 返回有序集合中指定成员的索引:zrank sortset guanyu
127.0.0.1:6500> zrange sortset 0 -1 withscores
"liubei"
"1.2"
"guanyu"
"2.1000000000000001"
"zhangfei"
"3.5"

127.0.0.1:6500> zrank sortset guanyu
(integer) 1
  1. 移除有序集合中的一个或多个成员:zrem sortset guanyu zhangfei
127.0.0.1:6500> zrange sortset 0 -1 withscores
"liubei"
"1.2"
"guanyu"
"2.1000000000000001"
"zhangfei"
"3.5"

127.0.0.1:6500> zrem sortset guanyu zhangfei
(integer) 2

127.0.0.1:6500> zrange sortset 0 -1 withscores
"liubei"
"1.2"
  1. 有序集合中对指定成员的分数加上增量 increment:zincrby sortset 2 liubei
127.0.0.1:6500> zrange sortset 0 -1 withscores
"liubei"
"1.2"

127.0.0.1:6500> zincrby sortset 2 liubei
"3.2000000000000002"

127.0.0.1:6500> zrange sortset 0 -1 withscores
"liubei"
"3.2000000000000002"
  1. 计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination:zinterstore sortset4 2 sortset sortset2
127.0.0.1:6500> zrange sortset 0 -1 withscores
"a"
"1"
"b"
"2"

127.0.0.1:6500> zrange sortset2 0 -1 withscores
"b"
"1"
"c"
"2"

127.0.0.1:6500> zrange sortset3 0 -1 withscores
(empty list or set)

127.0.0.1:6500> zinterstore sortset3 2 sortset sortset2
(integer) 1

127.0.0.1:6500> zrange sortset3 0 -1 withscores
"b"
"3"

127.0.0.1:6500> zadd sortset4 4 hu
(integer) 1

127.0.0.1:6500> zrange sortset4 0 -1
"hu"

127.0.0.1:6500> zinterstore sortset4 2 sortset sortset2
(integer) 1

127.0.0.1:6500> zrange sortset4 0 -1 withscores
"b"
"3"

注意:这个求交集的时候必须指定交集运算的集合数量,还有交集的时候是把score相加的,当然对于目标集合是覆盖型的

  1. 返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列:zrangebyscore sortset (1 4 withscores
127.0.0.1:6500> zrange sortset 0 -1 withscores
"a"
"1"
"c"
"2"
"b"
"4"
"d"
"4"

127.0.0.1:6500> zrangebyscore sortset (1 4 withscores
"c"
"2"
"b"
"4"
"d"
"4"

127.0.0.1:6500> zrangebyscore sortset -inf +inf withscores
"a"
"1"
"c"
"2"
"b"
"4"
"d"
"4"

score的区间:上面写法的意思(1 4是score>1并且score<=4的时候,-inf +inf表示的是全部的分数

  1. 返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列:
zrank sortset b

127.0.0.1:6500> zrange sortset 0 -1 withscores
"a"
"1"
"c"
"2"
"b"
"4"
"d"
"4"

127.0.0.1:6500> zrank sortset b
(integer) 2
  1. 其他的命令还有求并集的“ZUNIONSTORE”、根据排名删除的“ZREMRANGEBYRANK”、根据权重删除的“ZREMRANGEBYSCORE” 这里不再试验

参考博客:https://blog.csdn.net/u010476739/article/details/99490167

发布了91 篇原创文章 · 获赞 174 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/weixin_44685869/article/details/104906514
今日推荐