2021-03-01
Redis 数据结构
一、Redis基础知识
redis 启动客户端与服务器命令
1
2
3redis-server [服务器配置文件] : 服务器命令 [启动特定端口的服务器,默认端口为 6379]
redis-cli [-p 端口号]: 客户端命令 [启动一个特定端口的客户端,默认端口为 6379]一个redis.windows.conf配置就是一个redis服务器。需要启动多个服务器时,只需要修改一下这个配置文件redis.windows.conf的名称,更改端口号,再用redis-server就可以启动。
复制配置文件 redis.windows.conf 并改名
在新配置中更改端口号
使用启动命令启动服务端
启动默认服务器
启动修改后端口服务器
使用启动命令启动客户端
启动默认客户端
启动修改端口后客户端
redis 和 memcached 独特之处
- redis 可以持久化保存数据到硬盘;memcached 只可以做缓存
- redis 相比于 memcached,支持数据类型更多
redis 优点
- 读写速度快: redis 数据存放在内存内,数据结构类似于 HashMap, HashMap 的优势就是查找和操作时间复杂度都是O(1)
- 支持丰富的数据类型: string, hash, list, set, sorted
- 支持简单的事务: watch
- 丰富的特性: 可以用于缓存,消息队列,按 key 设置过期时间,到期后自动删除
- 支持数据持久化: 支持AOF和RDB 两种持久化方式,从而进行数据的恢复操作,可以有效防止数据丢失
- 支持主从复制实现数据备份: 主机会自动将数据同步到从机
Redis 目录下的重要文件意义
- redis-benchmark :性能测试工具
- redis-check-aof: 日志文件检测工具 (可以检测并修复由于各种突发原因造成的日志损坏, eg:断电)
- redis-check-dump: 快照文件检测工具 (可以检测并修复由于各种突发原因造成的快照损坏, eg:断电)
- redis-cli: redis 客户端
- redis-server: redis 服务器
- redis.windows.conf: redis 配置文件 在启动 redis 时 一个配置文件相当于一个服务器数据库
redis基础命令
keys *
: 返回所有键 (key)keys na*
: 返回所有以 na 开头的键exists name
: 判断 name 键 是否存在del name
: 删除 name 键expire key_name 10
: 设置 key_name 键的过期时间为 10s 后 (自动删除)- 通过这种有效期可以做到自动删除,其实有效期到了,也不是立马删除的,删除的时机是有配置文件决定的
ttl key_name
: 查看 key_name 键的过期时间,-1 表示已过期 或永不过期move name 1
: 将键名为 name 的键转移到 1 的数据库select 1
: 进入到 1 的数据库中,默认为在 0 数据库persist name
: 移除 name 键的过期时间flushdb
: 删除所有的数据,清除当前所在库的所有数据flushall
: 清空所有数据
二、redis 数据类型
1. String 字符串
十二种方法
set 方法: 设置 key 对应的值为 string 类型的 value,如果 key 已经存在,则覆盖 key 对应的 value 值.(在 redis 中 key 只能有一个)
1
2127.0.0.1:6379[1]> set name liuliu
OKget 方法: 根据 key 获取 value 值
1
2127.0.0.1:6379[1]> get name
"liuliu"setnx 方法: 设置一个不存在的字符串,返回 0 表示设置失败,已存在;返回 1 标识设置新值成功(nx: not exist)
1
2
3
4
5
6
7
8
9
10
11127.0.0.1:6379[1]> setnx name angel
(integer) 0
127.0.0.1:6379[1]> setnx age 23
(integer) 1
127.0.0.1:6379[1]> keys *
1) "name"
2) "age"
127.0.0.1:6379[1]> get name
"liuliu"
127.0.0.1:6379[1]> get age
"23"setex: 设置字符串,同时设置有效期。(ex – expire 有效期)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15127.0.0.1:6379[1]> setex color 20 red
OK
立即查看 keys
127.0.0.1:6379[1]> keys *
1) "color"
2) "name"
3) "age"
127.0.0.1:6379[1]> get color
"red"
20s 后查看 keys
127.0.0.1:6379[1]> keys *
1) "name"
2) "age"
127.0.0.1:6379[1]> get color
(nil)setrange: 替换字符串:
etrange key offset value
1
2
3
4
5
6127.0.0.1:6379[1]> get name
"liuliu"
127.0.0.1:6379[1]> setrange name 3 fei
(integer) 6
127.0.0.1:6379[1]> get name
"liufei"mset: 一次设置多个 key-value, 返回 ok 表示设置成功,返回 0 表示全部失败。如果存在则替换.(m – multi)
mset key value [key value ...]
1
2
3
4
5
6
7
8
9
10
11127.0.0.1:6379[1]> mset name1 lisi name2 zhangsan
OK
127.0.0.1:6379[1]> keys *
1) "name1"
2) "name"
3) "name2"
4) "age"
127.0.0.1:6379[1]> get name1
"lisi"
127.0.0.1:6379[1]> get name2
"zhangsan"msetnx: 一次设置多个不存在的 key-value,返回 1 表示全部设置成功,返回 0 表示全部失败
msetnx key value [key value ...]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18设置已存在的 keys 返回 0
127.0.0.1:6379[1]> msetnx name1 wangwu name3 xiaoer
(integer) 0
127.0.0.1:6379[1]> keys *
1) "name1"
2) "name"
3) "name2"
4) "age"
设置不存在的 keys
127.0.0.1:6379[1]> msetnx name3 wangwu name4 xiaoer
(integer) 1
127.0.0.1:6379[1]> keys *
1) "name1"
2) "name3"
3) "age"
4) "name2"
5) "name4"
6) "name"getset: 获取原值,并设置新值
getset key value
1
2
3
4
5
6127.0.0.1:6379[1]> get age
"23"
127.0.0.1:6379[1]> getset age 110
"23"
127.0.0.1:6379[1]> get age
"110"getrange: 获取 key 对应 value 指定范围内的的字符串
getrange key start end
1
2
3
4127.0.0.1:6379[1]> get name1
"lisi"
127.0.0.1:6379[1]> getrange name1 1 3
"isi"mget: 一次获取多个 key 对应的 value 值,不存在则返回 nil
mget key [key ...]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16127.0.0.1:6379[1]> keys *
1) "name1"
2) "name3"
3) "age"
4) "name2"
5) "name4"
6) "name"
7) "gae"
127.0.0.1:6379[1]> mget name name1 name2 name3 name4 name5 name6
1) "liufei"
2) "lisi"
3) "zhangsan"
4) "wangwu"
5) "xiaoer"
6) (nil)
7) (nil)incr: 对 key 对应的 value 做加一操作,并返回新值
incr key
1
2
3
4
5
6127.0.0.1:6379[1]> get age
"110"
127.0.0.1:6379[1]> incr age
(integer) 111
127.0.0.1:6379[1]> get age
"111"incrby: 与 incr 类似,加指定值,key不存在的时候会创建 key, 并认为 该 key 原 value=0
incrby key increment
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18127.0.0.1:6379[1]> get age
"111"
127.0.0.1:6379[1]> incrby age 50
(integer) 161
127.0.0.1:6379[1]> get age
"161"
127.0.0.1:6379[1]> keys *
1) "name1"
2) "name3"
3) "age"
4) "name2"
5) "name4"
6) "name"
7) "gae"
127.0.0.1:6379[1]> incrby length 180
(integer) 180
127.0.0.1:6379[1]> get length
"180"decr:对 key 对应的 value 做 减一操作
decr key
1
2
3
4
5
6127.0.0.1:6379[1]> get age
"161"
127.0.0.1:6379[1]> decr age
(integer) 160
127.0.0.1:6379[1]> get age
"160"decrby: 对 key 对应的 value 减去指定的值
decrby key decrement
1
2
3
4
5
6127.0.0.1:6379[1]> get age
"160"
127.0.0.1:6379[1]> decrby age 100
(integer) 60
127.0.0.1:6379[1]> get age
"60"append: 对 key 对应的 value 字符串追加,返回新字符串的长度
append key value
1
2
3
4
5
6127.0.0.1:6379[1]> get name3
"wangwu"
127.0.0.1:6379[1]> append name3 test
(integer) 10
127.0.0.1:6379[1]> get name3
"wangwutest"strlen: 获取 key 对应 value 的长度
strlen key
1
2
3
4127.0.0.1:6379[1]> strlen name1
(integer) 4
127.0.0.1:6379[1]> get name1
"lisi"
2. Hash 类型
Hash 类型介绍
- Redis hash 是一个 string 类型的 filed 和value 的映射表。相较于对象的每个字段存成单个 string 类型。将一个对象存储在 hash 类型中会占用更少的内存,并且可以更方便存储整个对象
十一种类型
hset:设置 hash filed 为指定值,如果 key 不存在则先创建。key 存在则替换
hset key field value
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22127.0.0.1:6379[1]> keys *
1) "name1"
2) "name3"
3) "name4"
4) "name2"
5) "age"
6) "name"
7) "gae"
8) "length"
设置一个 user: 001 的用户 name 为 liuliu (可以将 user:001看作一个表)
127.0.0.1:6379[1]> hset user:001 name liuliu
(integer) 1
127.0.0.1:6379[1]> keys *
1) "name1"
2) "name3"
3) "name4"
4) "name2"
5) "age"
6) "name"
7) "user:001"
8) "gae"
9) "length"hget: 获取指定 field 字段的值
hget key field
1
2
3
4127.0.0.1:6379[1]> hget user name
(nil)
127.0.0.1:6379[1]> hget user:001 name
"liuliu"hsetnx: 设置hash filed为指定值,如果key不存在,则先创建。如果key存在则返回0表示设置失败。
hsetnx key field value
1
2
3
4
5
6
7
8127.0.0.1:6379[1]> hsetnx user:001 name lisi
(integer) 0
127.0.0.1:6379[1]> hsetnx user:001 age 19
(integer) 1
127.0.0.1:6379[1]> hget user:001 age
"19"
127.0.0.1:6379[1]> hget user:001 name
"liuliu"hmset: 同时设置 hash 的多个 file
hmset key field value [field value ...]
1
2127.0.0.1:6379[1]> hmset user:002 name wangwu age 19
OKhmget: 获取全部指定的 hash filed, 必需指定获取的 key 的名称
hmget key field [field ...]
1
2
3127.0.0.1:6379[1]> hmget user:002 name age
1) "wangwu"
2) "19"hincrby: 对 hash filed 加上指定的值
hincrby key field increment
1
2
3
4
5
6127.0.0.1:6379[1]> hget user:001 age
"19"
127.0.0.1:6379[1]> hincrby user:001 age 10
(integer) 29
127.0.0.1:6379[1]> hget user:001 age
"29"hexists: 测试制定的 filed 是否存在,返回1表示存在,返回0表示不存在
hexists key field
1
2
3
4
5
6127.0.0.1:6379[1]> hexists user:001 name
(integer) 1
127.0.0.1:6379[1]> hexists user:001 age
(integer) 1
127.0.0.1:6379[1]> hexists user:001 weight
(integer) 0hlen: 返回指定 hash 的 filed 的数量
hlen key
1
2127.0.0.1:6379[1]> hlen user:001
(integer) 2hdel: 删除指定 hash 的 field 字段,返回1表示删除成功,0表示删除失败
hdel key field [field ...]
1
2
3
4
5
6127.0.0.1:6379> hget user:001 age
"29"
127.0.0.1:6379> hdel user:001 age
(integer) 1
127.0.0.1:6379> hget user:001 age
(nil)hkeys: 返回 hash 的所有 filed
hkeys key
1
2
3127.0.0.1:6379> hkeys user:002
1) "name"
2) "age"hvals: 返回 hash 的所有 value
hvals key
1
2
3127.0.0.1:6379> hvals user:002
1) "wangwu"
2) "19"
3. List 类型
List 类型介绍
- List 是一个链表结构,主要功能是 push、pop,获取一个范围的所有值等等,操作中 key 理解为链表的名字。
- Redis 的 list 类型其实就是每个子元素都是 string类型的双向链表.我们可以通过push、pop操作链表的头部或者链表尾部添加元素,这样list既可以作为栈,又可以作为队列。
十二种方法
lpush: 在 key 对应 lisy 的头部添加字符串元素,返回 list 中元素的个数
lpush key value [value ...]
1
2
3
4
5
6
7
8127.0.0.1:6379> lpush list1 "hello"
(integer) 1
127.0.0.1:6379> lpush list1 " " "word"
(integer) 3
127.0.0.1:6379> lrange list1 0 -1 (0 -1 第一个到最后一个)
1) "word"
2) " "
3) "hello"lrange: 获取 list 中的元素
lrange key start[0:第一个] stop[-1:最后一个]
1
2
3
4127.0.0.1:6379> lrange list1 0 -1 (0 -1 第一个到最后一个)
1) "word"
2) " "
3) "hello"rpush: 在 key 对应的 list 尾部添加元素
rpush key value [value ...]
1
2
3
4
5
6
7
8127.0.0.1:6379> rpush list1 "abc" "test"
(integer) 5
127.0.0.1:6379> lrange list1 0 -1
1) "word"
2) " "
3) "hello"
4) "abc"
5) "test"linsert: 在 key 对应 list 的特定位置前或后添加字符串
linsert key BEFORE|AFTER pivot value
1
2
3
4
5
6
7
8
9127.0.0.1:6379> linsert list1 before abc "test0"
(integer) 6
127.0.0.1:6379> lrange list1 0 -1
1) "word"
2) " "
3) "hello"
4) "test0"
5) "abc"
6) "test"lset: 更改 list 中指定下标的元素,返回 ok 则设置成功
lset key index value
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16127.0.0.1:6379> lrange list1 0 -1
1) "word"
2) " "
3) "hello"
4) "test0"
5) "abc"
6) "test"
127.0.0.1:6379> lset list1 2 "liuliu"
OK
127.0.0.1:6379> lrange list1 0 -1
1) "word"
2) " "
3) "liuliu"
4) "test0"
5) "abc"
6) "test"irem: 从 key 对应list 中删除 n 个和 value 相同的元素 (n<0 从未不删除, n=0 全部删除,n>0从头不删除)
lrem key count value
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15127.0.0.1:6379> lpush list2 "one" "two" "three"
(integer) 3
127.0.0.1:6379> lrange list2 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lrem list2 1 one
(integer) 1
127.0.0.1:6379> lrange list2 0 -1
1) "three"
2) "two"
127.0.0.1:6379> lrem list2 0 three
(integer) 1
127.0.0.1:6379> lrange list2 0 -1
1) "two"ltrim: 保留 list 中指定范围的数据,其他的批量删除
ltrim key start stop
1
2
3
4
5
6
7
8
9127.0.0.1:6379> lrange list2 0 -1
1) "three"
2) "one"
3) "two"
127.0.0.1:6379> ltrim list2 1 2
OK
127.0.0.1:6379> lrange list2 0 -1
1) "one"
2) "two"lpop: 从 list 的头部删除元素,并返回该元素
lpop key
1
2
3
4
5
6
7127.0.0.1:6379> lrange list2 0 -1
1) "one"
2) "two"
127.0.0.1:6379> lpop list2
"one"
127.0.0.1:6379> lrange list2 0 -1
1) "two"rpop: 从 list 尾部删除元素,并返回该元素
rpop key
1
2
3
4
5
6
7
8
9127.0.0.1:6379> lrange list2 0 -1
1) "three"
2) "one"
3) "two"
127.0.0.1:6379> rpop list2
"two"
127.0.0.1:6379> lrange list2 0 -1
1) "three"
2) "one"rpoplpush: 从第一个 list 的尾部删除元素,并添加到第二个 list 的头部
rpoplpush source destination
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22127.0.0.1:6379> lrange list2 0 -1
1) "three"
2) "one"
127.0.0.1:6379> lrange list1 0 -1
1) "word"
2) " "
3) "liuliu"
4) "test0"
5) "abc"
6) "test"
127.0.0.1:6379> rpoplpush list1 list2
"test"
127.0.0.1:6379> lrange list1 0 -1
1) "word"
2) " "
3) "liuliu"
4) "test0"
5) "abc"
127.0.0.1:6379> lrange list2 0 -1
1) "test"
2) "three"
3) "one"lindex: 返回名称为 key 的 list 中index 位置的元素 <===> list[index]
lindex key index
1
2
3
4
5
6127.0.0.1:6379> lrange list2 0 -1
1) "test"
2) "three"
3) "one"
127.0.0.1:6379> lindex list2 2
"one"llen: 返回指定 key 对应的 list 的长度 <===> len(list)
llen key
1
2
3
4
5
6127.0.0.1:6379> llen list2
(integer) 3
127.0.0.1:6379> lrange list2 0 -1
1) "test"
2) "three"
3) "one"
4. Sets 类型
Sets 类型介绍
- Set 是一个 string 的,不允许重复。Set 是通过 hash table 实现的.添加、删除、查找的复杂度都是 O(1).对集合我们可以取并集、交集、差集
十四种方法
sadd:向 key 对应的 set 集合中添加元素,返回 1 表示添加成功,返回 0 表示失败
sadd key member [member ...]
1
2
3
4
5127.0.0.1:6379[1]> sadd myset one two
(integer) 2
127.0.0.1:6379[1]> smembers myset
1) "two"
2) "one"Smembers: 查看 set 集合中的元素
smembers key
1
2
3127.0.0.1:6379[1]> smembers myset
1) "two"
2) "one"srem: 删除 key 对应 set 集合中的指定元素,返回 1 表示删除成功,返回 0 表示删除失败
srem key member [member ...]
1
2
3
4
5
6
7
8
9
10
11127.0.0.1:6379[1]> smembers myset
1) "two"
2) "one"
3) "three"
127.0.0.1:6379[1]> srem myset one
(integer) 1
127.0.0.1:6379[1]> smembers myset
1) "two"
2) "three"
127.0.0.1:6379[1]> srem myset five
(integer) 0spop: 随机删除 set 中的指定个元素并返回该元素
spop key [count]
1
2
3
4
5
6
7
8
9127.0.0.1:6379[1]> smembers myset
1) "two"
2) "one"
3) "three"
127.0.0.1:6379[1]> spop myset 2
1) "two"
2) "three"
127.0.0.1:6379[1]> smembers myset
1) "one"sdiff: 返回给定 set 集合的差集 (以在前的 set 集合为标准)
sdiff key [key ...]
1
2
3
4
5
6
7
8
9
10127.0.0.1:6379[1]> smembers myset
1) "two"
2) "one"
127.0.0.1:6379[1]> smembers myset1
1) "two"
2) "three"
127.0.0.1:6379[1]> sdiff myset myset1
1) "one"
127.0.0.1:6379[1]> sdiff myset1 myset
1) "three"sdiffstore: 返回所有给定 set 集合的差集,并将差集添加到另外一个集合中
sdiffstore destination key [key ...]
1
2
3
4127.0.0.1:6379[1]> sdiffstore myset3 myset1 myset
(integer) 1
127.0.0.1:6379[1]> smembers myset3
1) "three"sinter: 返回所有给定集合的交集
sinter key [key ...]
1
2
3
4
5
6
7
8127.0.0.1:6379[1]> smembers myset
1) "two"
2) "one"
127.0.0.1:6379[1]> smembers myset1
1) "two"
2) "three"
127.0.0.1:6379[1]> sinter myset myset1
1) "two"sinterstore: 返回所有给定集合 key 的交集,并将结果存为另一个 key
sinterstore destination key [key ...]
1
2
3
4127.0.0.1:6379[1]> sinterstore myset2 myset myset1
(integer) 1
127.0.0.1:6379[1]> smembers myset2
1) "two"sunion: 返回所有给定集合的并集
sunion key [key ...]
1
2
3
4
5
6
7
8
9
10127.0.0.1:6379[1]> smembers myset
1) "two"
2) "one"
127.0.0.1:6379[1]> smembers myset1
1) "two"
2) "three"
127.0.0.1:6379[1]> sunion myset myset1
1) "one"
2) "two"
3) "three"sunionstore: 返回所有给定集合的并集,并将结果存入另一个集合
sunionstore destination key [key ...]
1
2
3
4
5
6127.0.0.1:6379[1]> sunionstore myset4 myset myset1
(integer) 3
127.0.0.1:6379[1]> smembers myset4
1) "one"
2) "two"
3) "three"smove: 从第一个集合中移除元素并将该元素添加到另一个集合中
smove source destination member
1
2
3
4
5
6
7
8
9
10
11
12
13
14127.0.0.1:6379[1]> smembers myset
1) "two"
2) "one"
127.0.0.1:6379[1]> smembers myset1
1) "two"
2) "three"
127.0.0.1:6379[1]> smove myset myset1 one
(integer) 1
127.0.0.1:6379[1]> smembers myset
1) "two"
127.0.0.1:6379[1]> smembers myset1
1) "one"
2) "two"
3) "three"Scard: 返回 set 集合中元素的个数 llen(list) strlen(str) hlen(hash)
scard key
1
2
3
4
5
6127.0.0.1:6379[1]> smembers myset1
1) "one"
2) "two"
3) "three"
127.0.0.1:6379[1]> scard myset1
(integer) 3sismember: 测试 member 元素是否是名称为 key 的 set 集合; 是的话返回 1 否则为 0
sismember key member
1
2
3
4
5
6
7
8127.0.0.1:6379[1]> smembers myset1
1) "one"
2) "two"
3) "three"
127.0.0.1:6379[1]> sismember myset1 one
(integer) 1
127.0.0.1:6379[1]> sismember myset1 five
(integer) 0srandmember: 随机返回 set 集合中的几个元素 ,但不删除该元素
srandmember key [count]
1
2
3
4
5
6127.0.0.1:6379[1]> srandmember myset1 2
1) "one"
2) "three"
127.0.0.1:6379[1]> srandmember myset1 2
1) "two"
2) "one"
5. Sorted set (zset) 类型
zset 类型介绍
- Sorted set 是 set 的升级版,在 set 的基础上增加了顺序属性,在添加元素时可以指定,每次指定后,zset会自动重新按新的值调整顺序。可以理解为有两列的 mysql 表,一列存 value,一列存顺序。操作 key 理解为 zset 的名字
十一种方法 ( rank: 下标索引:从0开始的; score: 分数,序号)
zadd: 向有序集合 set 中添加元素并指定顺序,如果该元素已存在就更新元素顺序
zadd key [NX|XX] [CH] [INCR] score member [score member ...]
1
2
3
4
5127.0.0.1:6379[1]> zadd myzset 1 one 2 two
(integer) 2
127.0.0.1:6379[1]> zrange myzset 0 -1
1) "one"
2) "twozrange: 从 zset 集合中取元素 并 输出元素序号 (WITHSCORES 输出元素序号)
zrange key start stop [WITHSCORES]
1
2
3
4
5
6
7
8
9
10127.0.0.1:6379[1]> zadd myzset 1 one 2 two
(integer) 2
127.0.0.1:6379[1]> zrange myzset 0 -1
1) "one"
2) "two"
127.0.0.1:6379[1]> zrange myzset 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"zrem: 删除 zset 集合中指定的元素
zrem key member [member ...]
1
2
3
4
5
6
7
8
9
10127.0.0.1:6379[1]> zrange myzset 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
127.0.0.1:6379[1]> zrem myzset two
(integer) 1
127.0.0.1:6379[1]> zrange myzset 0 -1 withscores
1) "one"
2) "1"zrank: 正序方式,获取指定元素的索引下标
zrank key member
1
2
3
4
5
6
7127.0.0.1:6379[1]> zrange myzset 0 -1
1) "one"
2) "two"
127.0.0.1:6379[1]> zrank myzset two
(integer) 1
127.0.0.1:6379[1]> zrank myzset one
(integer) 0zrevrank: 逆序方式获取指定元素的索引下标, rev–reverse
zrevrank key member
1
2
3
4
5
6
7127.0.0.1:6379[1]> zrange myzset 0 -1
1) "one"
2) "two"
127.0.0.1:6379[1]> zrevrank myzset one
(integer) 1
127.0.0.1:6379[1]> zrevrank myzset two
(integer) 0zincrby: 添加元素及其序号到 zset 中,或改变 zset 中元素的序号 若 zset 中已存在 元素 member,该元素的 score(序号) 增加 incrment(指定值) 否则向该集合中添加该元素,其score(序号) 的值为 increment
zincrby key increment member
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25127.0.0.1:6379[1]> zrange myzset 0 -1 withscores
1) "one"
2) "1"
127.0.0.1:6379[1]> zincrby myzset 2 two
"2"
127.0.0.1:6379[1]> zrange myzset 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
127.0.0.1:6379[1]> zincrby myzset 2 one
"3"
127.0.0.1:6379[1]> zrange myzset 0 -1 withscores
1) "two"
2) "2"
3) "one"
4) "3"
可以有相同序号
127.0.0.1:6379[1]> zincrby myzset 1 two
"3"
127.0.0.1:6379[1]> zrange myzset 0 -1 withscores
1) "one"
2) "3"
3) "two"
4) "3"zrangebyscore: 从 zset 集合指定范围中根据 score 顺序获取元素,可以限制获取次数
zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18127.0.0.1:6379[1]> zadd myzset1 0 name 1 age 2 gender 3 like
(integer) 4
127.0.0.1:6379[1]> zrange myzset1 0 -1 withscores
1) "name"
2) "0"
3) "age"
4) "1"
5) "gender"
6) "2"
7) "like"
8) "3"
127.0.0.1:6379[1]> zrangebyscore myzset1 1 3 withscores
1) "age"
2) "1"
3) "gender"
4) "2"
5) "like"
6) "3"zrevrange: 从 zset 集合中倒序 (score倒序) 获取元素
zrevrange key start stop [WITHSCORES]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25127.0.0.1:6379[1]> zrange myzset1 0 -1 withscores
1) "name"
2) "0"
3) "age"
4) "1"
5) "gender"
6) "2"
7) "like"
8) "3"
127.0.0.1:6379[1]> zrevrange myzset1 0 -1 withscores
1) "like"
2) "3"
3) "gender"
4) "2"
5) "age"
6) "1"
7) "name"
8) "0"
127.0.0.1:6379[1]> zrevrange myzset1 1 3 withscores
1) "gender"
2) "2"
3) "age"
4) "1"
5) "name"
6) "0"zcount: 返回集合中 score 在给定区间的数量
zcount key min max
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15127.0.0.1:6379[1]> zadd myzset1 3 follow
(integer) 1
127.0.0.1:6379[1]> zrange myzset1 0 -1 withscores
1) "name"
2) "0"
3) "age"
4) "1"
5) "gender"
6) "2"
7) "follow"
8) "3"
9) "like"
10) "3"
127.0.0.1:6379[1]> zcount myzset1 2 3
(integer) 3zcard: 返回 zset 集合中所有元素个数
zcard key
1
2
3
4
5
6
7
8
9
10
11
12
13127.0.0.1:6379[1]> zrange myzset1 0 -1 withscores
1) "name"
2) "0"
3) "age"
4) "1"
5) "gender"
6) "2"
7) "follow"
8) "3"
9) "like"
10) "3"
127.0.0.1:6379[1]> zcard myzset1
(integer) 5zremrangebyrank: 删除集合中排名 (下标) 在给定区间的元素
zremrangebyrank key start stop
1
2
3
4
5
6
7
8
9
10
11127.0.0.1:6379[1]> zremrangebyrank myzset1 3 3
(integer) 1
127.0.0.1:6379[1]> zrange myzset1 0 -1 withscores
1) "name"
2) "0"
3) "age"
4) "1"
5) "gender"
6) "2"
7) "like"
8) "3"zremrangebyscore: 删除集合中顺序 (score 值排序)在给定区间的元素
zremrangebyscore key min max
1
2
3
4
5
6
7
8
9
10
11
12
13
14127.0.0.1:6379[1]> zrange myzset1 0 -1 withscores
1) "name"
2) "0"
3) "age"
4) "1"
5) "gender"
6) "2"
7) "like"
8) "3"
127.0.0.1:6379[1]> zremrangebyscore myzset1 2 3
(integer) 2
127.0.0.1:6379[1]> zrange myzset1 0 -1
1) "name"
2) "age"