Redis 基础篇 |(2)五种数据结构的基本应用

1 Redis键(key)

1.1 实际应用

首先使用 mset 命令传入几个值

127.0.0.1:6379> mset k1 v1 k2 v2
OK

keys * :查看当前库所有 key (匹配:keys *1)

127.0.0.1:6379> keys *
1) "k2"
2) "k1"

exists key:判断某个key是否存在,存在返回1,不存在返回0。而且 exists 可以询问多个 key 值是否存在,返回的数字表示询问的诸多 key 中有几个 key 是存在的。

127.0.0.1:6379> exists k1
(integer) 1
127.0.0.1:6379> exists k1 k2
(integer) 2

type key :查看你的key是什么类型,但是type不支持同时询问多个key的类型

127.0.0.1:6379> type k1
string
127.0.0.1:6379> type k1 k2
(error) ERR wrong number of arguments for 'type' command

del key :删除指定的key数据,成功返回1,失败返回0

127.0.0.1:6379> del k1
(integer) 1
127.0.0.1:6379> del k3
(integer) 0

unlink key: 根据value选择非阻塞删除。

127.0.0.1:6379> unlink k2
(integer) 1

非阻塞删除出现的背景是,大部分 Redis 命令的执行速度都很快,所以不是问题;但也有一些命令,比如 ZUNIONSTORE、LRANGE、SINTER,以及臭名昭著的 KEYS,根据处理数据集大小的不同,可能会阻塞 Redis 数秒或几分钟。而「非阻塞删除」就是将删除操作放到另外一个线程(而非 Redis 主线程)去处理。仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作。

10秒钟:为给定的key设置过期时间,设置成功返回1,设置失败返回0;ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期

127.0.0.1:6379> expire k1 10  
(integer) 1
127.0.0.1:6379> ttl k1
(integer) 8

select:命令切换数据库,默认是0数据库,数据库范围从 0~15

127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> select 5
OK
127.0.0.1:6379[5]> select 0
OK
127.0.0.1:6379> 

dbsize:查看当前数据库的key的数量

127.0.0.1:6379> dbsize
(integer) 0
127.0.0.1:6379> mset k1 v1 k2 v2 
OK
127.0.0.1:6379> dbsize
(integer) 2

flushdb:清空当前库

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> dbsize
(integer) 0

flushall:通杀全部库

127.0.0.1:6379> mset k1 v1 k2 v2 
OK
127.0.0.1:6379> select 5
OK
127.0.0.1:6379[5]> mset k1 v1 k2 v2 
OK
127.0.0.1:6379[5]> flushall
OK
127.0.0.1:6379[5]> keys *
(empty array)
127.0.0.1:6379[5]> select 0
OK
127.0.0.1:6379> keys *
(empty array)

2 Redis字符串(String)

2.1 Redis 中 String 的简介

String 是Redis五种最基本的类型之一,在使用时可以理解成与Memcached一模一样的类型,一个key对应一个value。

String 类型是二进制安全的。意味着 Redis 的 string 可以包含任何数据。比如 jpg 图片或者序列化的对象。

String 类型是 Redis 最基本的数据类型,一个 Redis 中字符串 value 最多可以是 512M

2.2 String的常见命令

SET:添加或者修改已经存在的一个String类型的键值对

GET:根据key获取String类型的value

MSET:批量添加多个String类型的键值对

MGET:根据多个key获取多个String类型的valueI

NCR:让一个整型的key自增1

INCRBY:让一个整型的key自增并指定步长,例如:incrby num 2 让num值自增2

INCRBYFLOAT:让一个浮点类型的数字自增并指定步长

SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行

SETEX:添加一个String类型的键值对,并且指定有效期

Redis的key的格式:[项目名]:[业务名]:[类型]:[id]

2.3 常用命令示例

  1. set <key> <value>: 添加键值对

  2. get <key>:查询对应键值

127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> get k1
"v1"
  1. append <key> <value> 将给定的 <value> 追加到原值的末尾
127.0.0.1:6379> append k1 100
(integer) 5
127.0.0.1:6379> get k1
"v1100"
  1. strlen <key>:获得值的长度
127.0.0.1:6379> strlen k1
(integer) 5
  1. setnx <key> <value>:只有在 key 不存在时,设置 key 的值,而key存在时,不对key对应的value值作修改,之前的 set 命令则会覆盖原来的值
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> keys *
1) "k2"
2) "k1"
127.0.0.1:6379> set k1 v110
OK
127.0.0.1:6379> get k1
"v110"
127.0.0.1:6379> get k2
"v2"
127.0.0.1:6379> setnx k2 v210
(integer) 0
127.0.0.1:6379> get k2
"v2"
  1. incr <key>:将 key 中储存的数字值增1,只能对数字值操作,如果为空,新增值为1
127.0.0.1:6379> set k3 1
OK
127.0.0.1:6379> incr k3
(integer) 2
127.0.0.1:6379> get k3
"2"
127.0.0.1:6379> incr k3
(integer) 3
127.0.0.1:6379> incr k3
(integer) 4
127.0.0.1:6379> get k3
"4"
  1. decr <key>:将 key 中储存的数字值减1,只能对数字值操作,如果为空,新增值为-1
127.0.0.1:6379> decr k3
(integer) 3
127.0.0.1:6379> get k3
"3"
127.0.0.1:6379> decr k3
(integer) 2
127.0.0.1:6379> decr k3
(integer) 1
127.0.0.1:6379> get k3
"1"
  1. incrby/decrby <key> <步长>将 key 中储存的数字值增减。自定义步长。
127.0.0.1:6379> incrby k3 5
(integer) 6
127.0.0.1:6379> incrby k3 5
(integer) 11
127.0.0.1:6379> incrby k3 5
(integer) 16
127.0.0.1:6379> get k3
"16"
127.0.0.1:6379> decrby k3 3
(integer) 13
127.0.0.1:6379> decrby k3 3
(integer) 10
127.0.0.1:6379> get k3
"10"

注意:incr key 是一种原子操作,所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程)。

(1)在单线程中, 能够在单条指令中完成的操作都可以认为是"原子操作",因为中断只能发生于指令之间。

(2)在多线程中,不能被其它进程(线程)打断的操作就叫原子操作。

Redis单命令的原子性主要得益于Redis的单线程。

案例:

java中的i++是否是原子操作?不是,java是多线程的

i = 0;两个线程分别对i进行++100次,值是多少? 2~200

i++ 的步骤(1)取值,(2)++,(3)赋值

Thread-0Thread-1
i=0
……
i++
i=99
i++
i=1
i=1
i++
i=100
i++
i=2

mset <key1> <value1> <key2> <value2> .....:连续设置多个键值对

mget <key1> <key2> <key3> .....:同时获取一个或多个 value

127.0.0.1:6379> flushdb
OK
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"

msetnx <key1> <value1> <key2> <value2> ..... :同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。且 msetnx 有一个失败其他都是注入无效的

127.0.0.1:6379> msetnx k1 v110 k4 v110
(integer) 0
127.0.0.1:6379> mget k1 k2 k3 k4
1) "v1"
2) "v2"
3) "v3"
4) (nil)
127.0.0.1:6379> msetnx k1 v110
(integer) 0
127.0.0.1:6379> mget k1 k2 k3 k4
1) "v1"
2) "v2"
3) "v3"
4) (nil)
127.0.0.1:6379> msetnx k4 v110
(integer) 1
127.0.0.1:6379> mget k1 k2 k3 k4
1) "v1"
2) "v2"
3) "v3"
4) "v110"

getrange <key> <起始位置> <结束位置> :获得值的范围,类似java中的substring,前包,后包

127.0.0.1:6379> getrange k4 0 -1
"v110"
127.0.0.1:6379> getrange k4 0 2
"v11"

setrange <key> <起始位置> <value>:用 覆写所储存的字符串值,从<起始位置>开始(索引从0开始)。

127.0.0.1:6379> getrange k4 0 -1
"v110"
127.0.0.1:6379> setrange k4 1 000
(integer) 4
127.0.0.1:6379> get k4
"v000"

setex <key> <过期时间> <value>:设置键值的同时,设置过期时间,单位秒。

127.0.0.1:6379> setex k5 40 v5
OK
127.0.0.1:6379> ttl k5
(integer) 35
127.0.0.1:6379> ttl k5
(integer) 32
127.0.0.1:6379> ttl k5
(integer) 1
127.0.0.1:6379> ttl k5
(integer) -2

getset <key> <value>:以新换旧,设置了新值同时获得旧值。

127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> getset k1 v111
"v1"
127.0.0.1:6379> get k1
"v111"

3 Redis列表(List)

3.1 简介

Redis中的列表就是单键多值

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。

在这里插入图片描述

3.2 List的常见命令

LPUSH key element … :向列表左侧插入一个或多个元素

LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil

RPUSH key element … :向列表右侧插入一个或多个元素

RPOP key:移除并返回列表右侧的第一个元素

LRANGE key star end:返回一段角标范围内的所有元素

BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil

3.3 常用命令示例

lpush/rpush <key> <value1> <value2> <value3> .... :从左边/右边插入一个或多个值。

lrange <key> <start> <stop>:按照索引下标获得元素(从左到右)

127.0.0.1:6379> lpush k1 v1 v2 v3
(integer) 3
127.0.0.1:6379> lrange k1 0 -1
1) "v3"
2) "v2"
3) "v1"

lpush 命令就是链表的头插法

在这里插入图片描述

127.0.0.1:6379> rpush k11 v11 v22 v33
(integer) 3
127.0.0.1:6379> lrange k11 0 -1
1) "v11"
2) "v22"
3) "v33"

rpush 命令就是链表的尾插法

在这里插入图片描述

lpop/rpop <key> count:从左边/右边吐出一个值。值在键在,值光键亡。count 值表示取出几个值

127.0.0.1:6379> lrange k1 0 -1
1) "v4"
2) "v3"
3) "v2"
4) "v1"
5) "v0"
127.0.0.1:6379> rpop k1
"v0"
127.0.0.1:6379> lpop k1
"v4"
127.0.0.1:6379> lrange k1 0 -1
1) "v3"
2) "v2"
3) "v1"
127.0.0.1:6379> rpop k1 2
1) "v1"
2) "v2"
127.0.0.1:6379> lrange k1 0 -1
1) "v3"

rpoplpush <key1> <key2>:从列表右边吐出一个值,插到列表左边。

即把k1右边的v1转到k11的左边。

127.0.0.1:6379> lrange k11 0 -1
1) "v11"
2) "v22"
3) "v33"
127.0.0.1:6379> lrange k1 0 -1
1) "v3"
2) "v2"
3) "v1"
127.0.0.1:6379> rpoplpush k1 k11
"v1"
127.0.0.1:6379> lrange k1 0 -1
1) "v3"
2) "v2"
127.0.0.1:6379> lrange k11 0 -1
1) "v1"
2) "v11"
3) "v22"
4) "v33"

lindex <key> <index>:按照索引下标获得元素,从0开始(从左到右)

127.0.0.1:6379> lrange k11 0 -1
1) "v1"
2) "v11"
3) "v22"
4) "v33"
127.0.0.1:6379> lindex k11 1
"v11"
127.0.0.1:6379> lindex k11 2
"v22"
127.0.0.1:6379> lindex k11 0
"v1"

llen <key>:获得列表长度

127.0.0.1:6379> llen k11
(integer) 4
127.0.0.1:6379> llen k1
(integer) 2

linsert <key> before <value> <newvalue>:在的后面插入插入值

127.0.0.1:6379> lrange k1 0 -1
1) "v3"
2) "v2"
127.0.0.1:6379> linsert k1 after v2 v1
(integer) 3
127.0.0.1:6379> lrange k1 0 -1
1) "v3"
2) "v2"
3) "v1"
127.0.0.1:6379> linsert k1 before v3 v4
(integer) 4
127.0.0.1:6379> lrange k1 0 -1
1) "v4"
2) "v3"
3) "v2"
4) "v1"

lrem <key> <n> <value>:从左边删除n个value(从左到右)

127.0.0.1:6379> lrange k1 0 -1
1) "v4"
2) "v3"
3) "v2"
4) "v1"
127.0.0.1:6379> linsert k1 after v1 v1
(integer) 5
127.0.0.1:6379> linsert k1 after v1 v1
(integer) 6
127.0.0.1:6379> linsert k1 after v1 v1
(integer) 7
127.0.0.1:6379> lrange k1 0 -1
1) "v4"
2) "v3"
3) "v2"
4) "v1"
5) "v1"
6) "v1"
7) "v1"
127.0.0.1:6379> lrem k1 2 v1
(integer) 2
127.0.0.1:6379> lrange k1 0 -1
1) "v4"
2) "v3"
3) "v2"
4) "v1"
5) "v1"

lset <key> <index> <value>:将列表key下标为index的值替换成value

127.0.0.1:6379> lrange k1 0 -1
1) "v4"
2) "v3"
3) "v2"
4) "v1"
5) "v1"
127.0.0.1:6379> lset k1 4 v0
OK
127.0.0.1:6379> lrange k1 0 -1
1) "v4"
2) "v3"
3) "v2"
4) "v1"
5) "v0"

4 Redis集合(Set)

4.1 简介

Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。
Redis的Set是string类型的无序集合。它底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都是O(1)。一个算法,随着数据的增加,执行时间的长短,如果是O(1),数据增加,查找数据的时间不变

4.2 Set的常见命令

SADD key member … :向set中添加一个或多个元素

SREM key member … : 移除set中的指定元素

SCARD key: 返回set中元素的个数

SISMEMBER key member:判断一个元素是否存在于set中

SMEMBERS:获取set中的所有元素

SINTER key1 key2 … :求key1与key2的交集

4.3 常用命令示例

sadd <key> <value1> <value2> ...: 将一个或多个 member 元素加入到集合 key 中,已经存在的 member 元素将被忽略

smembers <key>:取出该集合的所有值。

127.0.0.1:6379> sadd k1 v1 v2 v3 v1
(integer) 3
127.0.0.1:6379> smembers k1
1) "v1"
2) "v2"
3) "v3"

sismember <key> <value>:判断集合是否为含有该值,有1,没有0

127.0.0.1:6379> sismember k1 v1
(integer) 1
127.0.0.1:6379> sismember k1 v4
(integer) 0

scard <key>:返回该集合的元素个数。

srem <key> <value1> <value2> ...: 删除集合中的某个元素。

127.0.0.1:6379> scard k1
(integer) 3
127.0.0.1:6379> srem k1 v1
(integer) 1
127.0.0.1:6379> scard k1
(integer) 2
127.0.0.1:6379> smembers k1
1) "v2"
2) "v3"

spop <key>:随机从该集合中吐出一个值。

127.0.0.1:6379> spop k1
"v3"
127.0.0.1:6379> smembers k1
1) "v2"

srandmember <key> <n>:随机从该集合中取出n个值。不会从集合中删除 。

127.0.0.1:6379> srandmember k1 2
1) "v2"
2) "v3"
127.0.0.1:6379> srandmember k1 2
1) "v1"
2) "v3"
127.0.0.1:6379> smembers k1
1) "v1"
2) "v2"
3) "v3"

smove <source> <destination> value:把集合中一个值从一个集合移动到另一个集合

127.0.0.1:6379> smove k1 k2 v1
(integer) 1
127.0.0.1:6379> smembers k1
1) "v2"
2) "v3"
127.0.0.1:6379> smembers k2
1) "v1"
2) "v33"
3) "v11"
4) "v22"

sinter <key1> <key2>:返回两个集合的交集元素。

sunion <key1> <key2>:返回两个集合的并集元素。

127.0.0.1:6379> smembers k1
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> smembers k2
1) "v1"
2) "v33"
3) "v11"
4) "v22"
127.0.0.1:6379> sinter k1 k2
1) "v1"
127.0.0.1:6379> sunion k1 k2
1) "v2"
2) "v3"
3) "v33"
4) "v1"
5) "v11"
6) "v22"

sdiff <key1> <key2>:返回两个集合的差集元素(key1中的,不包含key2中的)

127.0.0.1:6379> sdiff k1 k2
1) "v2"
2) "v3"

5 Redis哈希(Hash)

5.1 简介

Redis hash 是一个键值对集合。

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

类似Java里面的Map<String,Object>

用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息,如果用普通的key/value结构来存储

主要有以下2种存储方式:

  1. 每次修改用户的某个属性需要,先反序列化改好后再序列化回去。开销较大。

在这里插入图片描述

  1. 用户ID数据冗余

在这里插入图片描述

通过 key(用户ID) + field(属性标签) 就可以操作对应属性数据了,既不需要重复存储数据,也不会带来序列化和并发修改控制的问题

在这里插入图片描述

5.2 Hash的常见命令

HSET key field value:添加或者修改hash类型key的field的值

HGET key field:获取一个hash类型key的field的值

HMSET:批量添加多个hash类型key的field的值

HMGET:批量获取多个hash类型key的field的值

HGETALL:获取一个hash类型的key中的所有的field和value

HKEYS:获取一个hash类型的key中的所有的field

HVALS:获取一个hash类型的key中的所有的value

HINCRBY:让一个hash类型key的字段值自增并指定步长

HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行

5.3 常用命令示例

hset <key> <field> <value>:给集合中的 键赋值

hget <key1> <field>:从集合取出 value

hkeys <key>:列出该hash集合的所有field

hvals <key>:列出该hash集合的所有value

127.0.0.1:6379> hset user:1001 name zhangsan
(integer) 1
127.0.0.1:6379> hset user:1001 age 18
(integer) 1
127.0.0.1:6379> hset user:1001 gender 1
(integer) 1
127.0.0.1:6379> hget user:1001 name
"zhangsan"
127.0.0.1:6379> hkeys user:1001
1) "name"
2) "age"
3) "gender"
127.0.0.1:6379> hvals user:1001
1) "zhangsan"
2) "18"
3) "1"

hmset <key1> <field1> <value1> <field2> <value2>... :批量设置hash的值

127.0.0.1:6379> hmset user:1002 name lisi age 20 gender 0
OK
127.0.0.1:6379> hvals user:1002
1) "lisi"
2) "20"
3) "0"
127.0.0.1:6379> hkeys user:1002
1) "name"
2) "age"
3) "gender"

hexists <key1> <field>:查看哈希表 key 中,给定域 field 是否存在。

127.0.0.1:6379> HEXISTS user:1001 name
(integer) 1
127.0.0.1:6379> HEXISTS user:1001 email
(integer) 0

hincrby <key> <field> <increment>:为哈希表 key 中的域 field 的值加上增量

127.0.0.1:6379> HINCRBY user:1001 age 2
(integer) 20
127.0.0.1:6379> hget user:1001 age
"20"
127.0.0.1:6379> HINCRBY user:1001 age 5
(integer) 25
127.0.0.1:6379> hget user:1001 age
"25"
127.0.0.1:6379> HINCRBY user:1001 age -5
(integer) 20

hsetnx <key> <field> <value>:将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在 .

127.0.0.1:6379> HSETNX user:1001 email ffideal@163.com
(integer) 1
127.0.0.1:6379> HSETNX user:1001 age 29
(integer) 0
127.0.0.1:6379> hvals user:1001
1) "zhangsan"
2) "20"
3) "1"
4) "ffideal@163.com"
127.0.0.1:6379> hkeys user:1001
1) "name"
2) "age"
3) "gender"
4) "email"

6 Redis有序集合Zset(sorted set)

6.1 简介

Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。

不同之处是有序集合的每个成员都关联了一个评分(score),这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了 。

因为元素是有序的, 所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。

访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表。

6.2 SortedSet的常见命令

ZADD key score member:添加一个或多个元素到sorted set ,如果已经存在则更新其score值

ZREM key member:删除sorted set中的一个指定元素

ZSCORE key member : 获取sorted set中的指定元素的score值

ZRANK key member:获取sorted set 中的指定元素的排名

ZCARD key:获取sorted set中的元素个数

ZCOUNT key min max:统计score值在给定范围内的所有元素的个数

ZINCRBY key increment member:让sorted set中的指定元素自增,步长为指定的increment值

ZRANGE key min max:按照score排序后,获取指定排名范围内的元素

ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素

ZDIFF、ZINTER、ZUNION:求差集、交集、并集注意:所有的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可

6.3 常用命令示例

zadd <key> <score1> <value1> <score2> <value2>…:将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
zrange <key> <start> <stop> [WITHSCORES]:返回有序集 key 中,下标在 之间的元素;带WITHSCORES,可以让分数一起和值返回到结果集。

127.0.0.1:6379> zadd language 100 java 200 php 300 c 400 python 500 c++
(integer) 5
127.0.0.1:6379> zrange language 0 -1
1) "java"
2) "php"
3) "c"
4) "python"
5) "c++"
127.0.0.1:6379> zrange language 0 -1 withscores
 1) "java"
 2) "100"
 3) "php"
 4) "200"
 5) "c"
 6) "300"
 7) "python"
 8) "400"
 9) "c++"
10) "500"
127.0.0.1:6379> zrange language 0 2
1) "java"
2) "php"
3) "c"

zrangebyscore key minmax [withscores] [limit offset count]:返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。

127.0.0.1:6379> ZRANGEBYSCORE language 200 400
1) "php"
2) "c"
3) "python"
127.0.0.1:6379> ZRANGEBYSCORE language 200 400 withscores
1) "php"
2) "200"
3) "c"
4) "300"
5) "python"
6) "400"

zrevrangebyscore key max min [withscores] [limit offset count]:同上,改为从大到小排列。

127.0.0.1:6379> ZREVRANGEBYSCORE language 400 200 withscores
1) "python"
2) "400"
3) "c"
4) "300"
5) "php"
6) "200"

zincrby <key> <increment> <value>:为元素的score加上增量

127.0.0.1:6379> zincrby language 200 python
"600"
127.0.0.1:6379> zrange language 0 -1 withscores
 1) "java"
 2) "100"
 3) "php"
 4) "200"
 5) "c"
 6) "300"
 7) "c++"
 8) "500"
 9) "python"
10) "600"

zrem <key> <value>:删除该集合下,指定值的元素

127.0.0.1:6379> ZREM language python
(integer) 1
127.0.0.1:6379> zrange language 0 -1 withscores
1) "java"
2) "100"
3) "php"
4) "200"
5) "c"
6) "300"
7) "c++"
8) "500"

zcount <key> <min> <max>:统计该集合,分数区间内的元素个数

127.0.0.1:6379> ZCOUNT language 200 500
(integer) 3
127.0.0.1:6379> ZCOUNT language 100 200
(integer) 2

zrank <key> <value>:返回该值在集合中的排名,从0开始。

127.0.0.1:6379> zrank language php
(integer) 1

ZREVRANGEBYSCORE key max min [withscores] [limit offset count]:同上,改为从大到小排列。

127.0.0.1:6379> ZREVRANGEBYSCORE language 400 200 withscores
1) "python"
2) "400"
3) "c"
4) "300"
5) "php"
6) "200"

zincrby <key> <increment> <value>:为元素的score加上增量

127.0.0.1:6379> zincrby language 200 python
"600"
127.0.0.1:6379> zrange language 0 -1 withscores
 1) "java"
 2) "100"
 3) "php"
 4) "200"
 5) "c"
 6) "300"
 7) "c++"
 8) "500"
 9) "python"
10) "600"

zrem <key> <value>:删除该集合下,指定值的元素

127.0.0.1:6379> ZREM language python
(integer) 1
127.0.0.1:6379> zrange language 0 -1 withscores
1) "java"
2) "100"
3) "php"
4) "200"
5) "c"
6) "300"
7) "c++"
8) "500"

zcount <key> <min> <max>:统计该集合,分数区间内的元素个数

127.0.0.1:6379> ZCOUNT language 200 500
(integer) 3
127.0.0.1:6379> ZCOUNT language 100 200
(integer) 2

zrank <key> <value>:返回该值在集合中的排名,从0开始。

127.0.0.1:6379> zrank language php
(integer) 1

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_之桐_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值