Redis系列---3.Redis数据类型

发布于:2022-11-11 ⋅ 阅读:(835) ⋅ 点赞:(0)

文章目录

Redis数据类型

一、Redis的五大数据类型

1. string(字符串)

string是redis最基本的类型,可以理解成与Memcached一模一样的类型,一个key对应一个value。
string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M

2. hash(哈希,类似java里的Map)

Redis hash 是一个键值对集合。
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
类似Java里面的Map<String,Object>

3. list(列表)

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

4. set(集合)

Redis的Set是string类型的无序集合。它是通过HashTable实现实现的

5. zset(sorted set:有序集合)

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。
redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。

二、哪里去获得redis常见数据类型操作命令

三、Redis 键(key)

1. 常用

命令 作用
DEL key 删除key
DUMP key 序列化给定的key,并返回被序列化的值。
EXISTS key 检查给定key 是否存在
EXPIRE key seconds 设置给定的key的过期时间,以秒为单位
EXPIREAT key timestamp 设置给定的key的过期时间,与EXPIRE作用不同的是 EXPIREAT命令接受的时间参数是UNIX时间戳
PEXPIRE key millseconds 设置key的过期时间,以毫秒计
PEXPIRE key millseconds-timestamp 设置key的过期时间的时间戳,以毫秒计
KEYS pattern 查找所有符合给定模式(pattern) 的key
MOVE key db 将当前数据库的key移动到给定的数据库db中
PERSIST key 移除key的过期时间,将key持久保存
PTTL key 以毫秒为单位返回key的剩余时间
TTL key 以秒为单位,返回给定key的剩余生存时间(TTL,tiime to live)
RANDOMKEY 从当前数据库中随机返回一个key
RENAME key newkey 修改key的名称
RENAMENX key newkey 仅当newkey不存在时,将key改名为newkey
TYPE key 返回key所存储的值的类型

2. 案例

2.1 keys *

127.0.0.1:6380> keys *
1) "k9"
2) "k5"
3) "k6"
4) "k8"
5) "k7"
6) "k2"
7) "k3"
8) "k4"
9) "k1"
127.0.0.1:6380> 

2.2 exists key的名字,判断某个key是否存在

存在:
127.0.0.1:6380> EXISTS k1
(integer) 1
127.0.0.1:6380> 

不存在:
127.0.0.1:6380> EXISTS k12
(integer) 0
127.0.0.1:6380> 

2.3 move key db —>当前库就没有了,被移除了

将k1移动到2号库,原库没有了,2号库能够查询到k1数据

127.0.0.1:6380> move k1 2
(integer) 1
127.0.0.1:6380> get k1
(nil)
127.0.0.1:6380> 

127.0.0.1:6380> select 2
OK
127.0.0.1:6380[2]> get k1
"v1"
127.0.0.1:6380[2]>

2.4 expire key 秒钟:为给定的key设置过期时间

获取k2,k2有值;设置过期时间为10s;10s内获取k2,有值;10s后获取k2,k2为空

127.0.0.1:6380> get k2
"v2"
127.0.0.1:6380> EXPIRE k2 10
(integer) 1
127.0.0.1:6380> get k2
"v2"
127.0.0.1:6380> get k2
(nil)
127.0.0.1:6380>

2.5 ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期

获取k3,有值存在;ttl k3;-1表示永久有效;设置过期时间60s;获取k3,值存在;ttl k3,结果为有效时间

127.0.0.1:6380> get k3
"v3"
127.0.0.1:6380> ttl k3
(integer) -1
127.0.0.1:6380> EXPIRE k3 60
(integer) 1
127.0.0.1:6380> get k3
"v3"
127.0.0.1:6380> ttl k3
(integer) 51
127.0.0.1:6380>

2.6 type key 查看你的key是什么类型

127.0.0.1:6380> type k4
string
127.0.0.1:6380> 

四、Redis字符串(String)

1. 常用

命令 作用
SET GET 赋值与取值
INCR DECR 递增数字 递减数字
INCRBY DECRBY 增加制定的整数 减少制定整数
APPEND 向尾部追加
STRLEN 获取字符串长度
MGET MSET 同时设置/获取多个键值
getrange key start end 返回指定key对应的value从指定索引start到索引end的值,索引计数是从0开始。例如有key1:“hello”, 执行 getrange key1 0 2 ,那么会返回 hel,如果想获取整个key1对应的值,可以使用 getrange key1 0 -1
setrange key start value 设置指定key对应值的指定start索引的位置插入value,如果start索引超过了原value值范围,则自动使用null串来扩展

2. 特点:单值单value

3. 案例

3.1 set/get/del/append/strlen

127.0.0.1:6380> set k1 v1
OK
127.0.0.1:6380> get k1
"v1"
127.0.0.1:6380> del k1
(integer) 1
127.0.0.1:6380> 
127.0.0.1:6380> set k1 v11
OK
127.0.0.1:6380> APPEND k1 12a
(integer) 6
127.0.0.1:6380> get k1
"v1112a"
127.0.0.1:6380> STRLEN k1
(integer) 6
127.0.0.1:6380>
 

3.2 Incr/decr/incrby/decrby,一定要是数字才能进行加减

k2,k3不存在;k2为字符串,k3为数字;Incr k2失败,Incr k3成功
127.0.0.1:6380> get k2
(nil)
127.0.0.1:6380> get k3
(nil)
127.0.0.1:6380> set k2 v2
OK
127.0.0.1:6380> set k3 3
OK
127.0.0.1:6380> INCR k2
(error) ERR value is not an integer or out of range
127.0.0.1:6380> INCR k3
(integer) 4
127.0.0.1:6380> get k2
"v2"
127.0.0.1:6380> get k3
"4"
127.0.0.1:6380> 

decr k3:
127.0.0.1:6380> DECR k3
(integer) 3
127.0.0.1:6380> get k3
"3"
127.0.0.1:6380> 

decrby/incrby
127.0.0.1:6380> INCRBY k3 2
(integer) 5
127.0.0.1:6380> get k3
"5"
127.0.0.1:6380> DECRBY k3 3
(integer) 2
127.0.0.1:6380> get k3
"2"
127.0.0.1:6380> 

3.3 getrange/setrange

getrange:获取指定区间范围内的值,类似between......and的关系,从零到负一表示全部
setrange:设置指定区间范围内的值,格式是setrange key值 具体值

127.0.0.1:6380> GETRANGE k1 0 -1
"v1112a"
127.0.0.1:6380> GETRANGE k1 0 2
"v11"
127.0.0.1:6380> GETRANGE k1 1 4
"1112"
127.0.0.1:6380> GETRANGE k1 1 7
"1112a"
127.0.0.1:6380> 
127.0.0.1:6380> get k1
"v1112a"
127.0.0.1:6380> SETRANGE k1 1 4
(integer) 6
127.0.0.1:6380> get k1
"v4112a"
127.0.0.1:6380> 

3.4 setex(set with expire)键秒值/setnx(set if not exist)

setex:设置带过期时间的key,动态设置。
setex:键 秒值 真实值。
setnx:只有在 key 不存在时设置 key 的值。

setex:
127.0.0.1:6380> SETEX k1 10 helloword
OK
127.0.0.1:6380> get k1
"helloword"
127.0.0.1:6380> get k1
(nil)
127.0.0.1:6380> 

setnx:
127.0.0.1:6380> set k1 v1
OK
127.0.0.1:6380> get k1
"v1"
127.0.0.1:6380> SETNX k1 v22
(integer) 0
127.0.0.1:6380> SETNX k2 v2
(integer) 1
127.0.0.1:6380> 

3.5 mset/mget/msetnx

mset:同时设置一个或多个 key-value 对。
mget:获取所有(一个或多个)给定 key 的值。
msetnx:同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。

127.0.0.1:6380> mset k3 v3 k4 v4 k5 v5
OK
127.0.0.1:6380> mget k3 k4 k5
1) "v3"
2) "v4"
3) "v5"
127.0.0.1:6380> 
127.0.0.1:6380> MSETNX k5 v55 k6 v6 k7 v7
(integer) 0
127.0.0.1:6380> MSET k6 v6 k7 v7 k8 v8
OK
127.0.0.1:6380> 

3.6 getset(先get再set)

getset:将给定 key 的值设为 value ,并返回 key 的旧值(old value)。简单一句话,先get然后立即set
127.0.0.1:6380> getset k2 helloword
"v2"
127.0.0.1:6380> get k2
"helloword"
127.0.0.1:6380> 

五、Redis列表(List)

1. 常用

命令 作用
LPUSH RPUSH 向列表两端增加元素
LPOP RPOP 从列表两端弹出元素
LLEN 获取列表中元素的个数
LRANGE 获得列表片段
LREM 删除列表中指定值
LINDEX LSET 获得/设置指定索引的元素值
LTRIM 只保留列表指定片段
LINSERT 向列表中插入元素
RPOPLPUSH 将元素从一个列表转到另一个列表
LPUSHX、RPUSHX 只对已存在的列表执行推入操作
RPOPLPUSH 将右端弹出的元素推入左端
BLPOP BRPOP 阻塞式左/右端弹出操作
BRPOPLPUSH 阻塞式弹出并推入操作

2. 特点:单值多value

3. 案例

3.1 lpush/rpush/lrange

127.0.0.1:6380> LPUSH numbers one two three four five six
(integer) 6
127.0.0.1:6380> RPUSH age 21 22 23 24 25 26
(integer) 6
127.0.0.1:6380> LRANGE numbers 0 -1
1) "six"
2) "five"
3) "four"
4) "three"
5) "two"
6) "one"
127.0.0.1:6380> LRANGE age 0 -1
1) "21"
2) "22"
3) "23"
4) "24"
5) "25"
6) "26"
127.0.0.1:6380>

3.2 lpop/rpop

lpop:从栈顶出
rpop:从栈底出
127.0.0.1:6380> LRANGE numbers 0 -1
1) "six"
2) "five"
3) "four"
4) "three"
5) "two"
6) "one"
127.0.0.1:6380> lpop numbers
"six"
127.0.0.1:6380> 
127.0.0.1:6380> LRANGE age 0 -1
1) "21"
2) "22"
3) "23"
4) "24"
5) "25"
6) "26"
127.0.0.1:6380> lpop age
"21"
127.0.0.1:6380> 

127.0.0.1:6380> LRANGE numbers 0 -1
1) "five"
2) "four"
3) "three"
4) "two"
5) "one"
127.0.0.1:6380> rpop numbers
"one"
127.0.0.1:6380> LRANGE age 0 -1
1) "22"
2) "23"
3) "24"
4) "25"
5) "26"
127.0.0.1:6380> RPOP age
"26"
127.0.0.1:6380>

3.3 lindex,按照索引下标获得元素(从上到下)

通过索引获取列表中的元素 lindex key index

127.0.0.1:6380> LRANGE numbers 0 -1
1) "five"
2) "four"
3) "three"
4) "two"
127.0.0.1:6380> LRANGE age 0 -1
1) "22"
2) "23"
3) "24"
4) "25"
127.0.0.1:6380> LINDEX numbers 3
"two"
127.0.0.1:6380> LINDEX age 3
"25"
127.0.0.1:6380> 

3.4 llen

127.0.0.1:6380> lrange numbers 0 -1
1) "five"
2) "four"
3) "three"
4) "two"
127.0.0.1:6380> lrange age 0 -1
1) "22"
2) "23"
3) "24"
127.0.0.1:6380> llen numbers
(integer) 4
127.0.0.1:6380> LLEN age
(integer) 3
127.0.0.1:6380> 

3.5 lrem key 删N个value

 * 从left往right删除2个值等于v1的元素,返回的值为实际删除的数量
 *  LREM list3 0 值,表示删除全部给定的值。零个就是全部值

127.0.0.1:6380> LRANGE list01 0 -1
 1) "1"
 2) "1"
 3) "1"
 4) "2"
 5) "2"
 6) "2"
 7) "3"
 8) "3"
 9) "3"
10) "4"
11) "4"
12) "4"
13) "5"
14) "6"
15) "7"
127.0.0.1:6380> LREM list01 2 3
(integer) 2
127.0.0.1:6380> LRANGE list01 0 -1
 1) "1"
 2) "1"
 3) "1"
 4) "2"
 5) "2"
 6) "2"
 7) "3"
 8) "4"
 9) "4"
10) "4"
11) "5"
12) "6"
13) "7"
127.0.0.1:6380> 

3.6 ltrim key 开始index 结束index,截取指定范围的值后再赋值给key

ltrim:截取指定索引区间的元素,格式是ltrim list的key 起始索引 结束索引
127.0.0.1:6380> LPUSH list02 1 2 3 4 5 6 7 8 9
(integer) 9
127.0.0.1:6380> LRANGE list02 0 -1
1) "9"
2) "8"
3) "7"
4) "6"
5) "5"
6) "4"
7) "3"
8) "2"
9) "1"
127.0.0.1:6380> LTRIM list02 0 4
OK
127.0.0.1:6380> LRANGE list02 0 -1
1) "9"
2) "8"
3) "7"
4) "6"
5) "5"
127.0.0.1:6380> 

3.7 rpoplpush 源列表 目的列表

移除列表的最后一个元素,并将该元素添加到另一个列表并返回
127.0.0.1:6380> LRANGE list02 0 -1
1) "9"
2) "8"
3) "7"
4) "6"
5) "5"
127.0.0.1:6380> LRANGE list03 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6380> RPOPLPUSH list02 list03
"5"
127.0.0.1:6380> LRANGE list03 0 -1
1) "5"
2) "1"
3) "2"
4) "3"
5) "4"
6) "5"
127.0.0.1:6380> 

3.8 lset key index value

127.0.0.1:6380> LRANGE list03 0 -1
1) "5"
2) "1"
3) "2"
4) "3"
5) "4"
6) "5"
127.0.0.1:6380> LSET list03 1 6
OK
127.0.0.1:6380> LRANGE list03 0 -1
1) "5"
2) "6"
3) "2"
4) "3"
5) "4"
6) "5"
127.0.0.1:6380> 

3.9 linsert key before/after 值1 值2

在list某个已有值的前后再添加具体值
127.0.0.1:6380> LRANGE list03 0 -1
1) "5"
2) "6"
3) "2"
4) "3"
5) "4"
6) "5"
127.0.0.1:6380> linsert list03 before 6 java
(integer) 7
127.0.0.1:6380> LRANGE list03 0 -1
1) "5"
2) "java"
3) "6"
4) "2"
5) "3"
6) "4"
7) "5"
127.0.0.1:6380> LINSERT list03 after 6 vue
(integer) 8
127.0.0.1:6380> LRANGE list03 0 -1
1) "5"
2) "java"
3) "6"
4) "vue"
5) "2"
6) "3"
7) "4"
8) "5"
127.0.0.1:6380>

存在相同值:
127.0.0.1:6380> LRANGE list03 0 -1
1) "5"
2) "java"
3) "6"
4) "vue"
5) "2"
6) "3"
7) "4"
8) "5"
127.0.0.1:6380> LINSERT list03 before 5 X
(integer) 9
127.0.0.1:6380> LRANGE list03 0 -1
1) "X"
2) "5"
3) "java"
4) "6"
5) "vue"
6) "2"
7) "3"
8) "4"
9) "5"
127.0.0.1:6380>

3.10 性能总结

它是一个字符串链表,left、right都可以插入添加;
如果键不存在,创建新的链表;
如果键已存在,新增内容;
如果值全移除,对应的键也就消失了。
链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了。

六、Redis集合(Set)

1. 常用

命令 作用
SADD SREM 增加/删除元素
SMEMBERS 获取集合中的所有元素
SISMEMBER 判断元素是否在集合中
SDIFF SINTER SUNION 集合集合间运算
SCARD 获取集合中元素个数
SDIFFSTORE SINTERSTORE SUNIONSTORE 进行集合运算并将结果存储
SRANDMEMBER 随机获得集合中的元素

2. 单值多value

3. 案例

3.1 sadd/smembers/sismember

127.0.0.1:6380> SADD set01 1 1 2 2 3 3 
(integer) 3
127.0.0.1:6380> SMEMBERS set01
1) "1"
2) "2"
3) "3"
127.0.0.1:6380> SISMEMBER set01 1
(integer) 1
127.0.0.1:6380> SISMEMBER set01 x
(integer) 0
127.0.0.1:6380> 

3.2 scard,获取集合里面的元素个数

获取集合里面的元素个数
127.0.0.1:6380> SMEMBERS set01
1) "1"
2) "2"
3) "3"
127.0.0.1:6380> scard set01
(integer) 3
127.0.0.1:6380> 

3.3 srem key value 删除集合中元素

127.0.0.1:6380> SMEMBERS set01
1) "1"
2) "2"
3) "3"
127.0.0.1:6380> SREM set01 3
(integer) 1
127.0.0.1:6380> SMEMBERS set01
1) "1"
2) "2"
127.0.0.1:6380> 

3.4 srandmember key 某个整数(随机出几个数)

 *   从set集合里面随机取出2个
 *   如果超过最大数量就全部取出,
 *   如果写的值是负数,比如-3 ,表示需要取出3个,但是可能会有重复值。

127.0.0.1:6380> SMEMBERS set02
 1) "4"
 2) "2"
 3) "7"
 4) "6"
 5) "5"
 6) "01"
 7) "1"
 8) "3"
 9) "8"
10) "9"
127.0.0.1:6380> 
127.0.0.1:6380> SRANDMEMBER set02 3
1) "3"
2) "6"
3) "8"
127.0.0.1:6380> SRANDMEMBER set02 3
1) "3"
2) "01"
3) "7"
127.0.0.1:6380> SRANDMEMBER set02 3
1) "5"
2) "6"
3) "1"
127.0.0.1:6380> SRANDMEMBER set02 3
1) "01"
2) "3"
3) "9"
127.0.0.1:6380>
负数的时候可以重复:
127.0.0.1:6380> SMEMBERS set02
 1) "3"
 2) "4"
 3) "2"
 4) "8"
 5) "01"
 6) "6"
 7) "1"
 8) "5"
 9) "7"
10) "9"
127.0.0.1:6380> SRANDMEMBER set02 -3
1) "9"
2) "8"
3) "6"
127.0.0.1:6380> SRANDMEMBER set02 -3
1) "1"
2) "5"
3) "8"
127.0.0.1:6380> SRANDMEMBER set02 -3
1) "5"
2) "5"
3) "3"
127.0.0.1:6380> 

3.5 spop key 随机出栈

127.0.0.1:6380> SMEMBERS set01
 1) "1"
 2) "2"
 3) "3"
 4) "4"
 5) "5"
 6) "6"
 7) "7"
 8) "8"
 9) "9"
10) "10"
11) "11"
127.0.0.1:6380> spop set01
"8"
127.0.0.1:6380> spop set01
"9"
127.0.0.1:6380> spop set01
"1"
127.0.0.1:6380> spop set01
"5"
127.0.0.1:6380> 

3.6 smove key1 key2 在key1里某个值 作用是将key1里的某个值赋给key2

127.0.0.1:6380> SMEMBERS set03
1) "z"
2) "x"
3) "y"
127.0.0.1:6380> SMEMBERS set04
1) "1"
2) "2"
3) "3"
127.0.0.1:6380> SMOVE set04 set03 1
(integer) 1
127.0.0.1:6380> SMEMBERS set03
1) "z"
2) "x"
3) "1"
4) "y"
127.0.0.1:6380> SMEMBERS set04
1) "2"
2) "3"
127.0.0.1:6380> 

3.7 数学集合类

3.7.1 差集:sdiff
```
在第一个set里面而不在后面任何一个set里面的项
127.0.0.1:6380> SMEMBERS set01
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6380> SMEMBERS set02
1) "3"
2) "2"
3) "a"
4) "b"
5) "1"
127.0.0.1:6380> SDIFF set01 set02
1) "4"
2) "5"
127.0.0.1:6380> 
```
3.7.2 交集:sinter
```
127.0.0.1:6380> SMEMBERS set01
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6380> SMEMBERS set02
1) "3"
2) "2"
3) "a"
4) "b"
5) "1"
127.0.0.1:6380> SINTER set01 set02
1) "1"
2) "2"
3) "3"
127.0.0.1:6380> 
```
3.7.3 并集:sunion
```
127.0.0.1:6380> SMEMBERS set01
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6380> SMEMBERS set02
1) "3"
2) "2"
3) "a"
4) "b"
5) "1"
127.0.0.1:6380> SUNION set01 set02
1) "3"
2) "4"
3) "2"
4) "a"
5) "5"
6) "b"
7) "1"
127.0.0.1:6380> 
```

七、Redis哈希(Hash)

1. 常用

命令 作用 可用版本
hset hget 设置和获取 >=2.0.0
hmset hmget 设置/获取key中多个field的值 >=2.0.0
hgetall 获取key的所有字段和值 >=2.0.0
hkeys 获取key的所有字段 >=2.0.0
hvals 获取key的所有值 >=2.0.0
hsetnx 只有在field不存在的情况才设置值 >=2.0.0
hincrby 给key的field自增指定值 >=2.0.0
hincrbyfloat 给key的field自增指定值 >=2.6.0
hdel 删除key中的field >=2.0.0
hexists 返回key中是否存在field >=2.0.0
hlen 返回key的字段数 >=2.0.0
hstrlen 返回key中field的值的长度 >=3.2.0
hrandfield 返回key中随机的一个field >=6.2.0
hscan 迭代key中的field,默认情况迭代hash的所有field,当某个字段的字节数大于64字节,或者字段数大于512,count选项才有用迭代之后,会返回游标,该游标用于下次迭代,第一次迭代写0,迭代完后的游标是0 >=2.8.0

2. KV模式不变,但V是一个键值对

3. 案例

3.1 hset/hget/hmset/hmget/hgetall/hdel

 127.0.0.1:6380> hset user id 11
(integer) 1
127.0.0.1:6380> hget user id
"11"
127.0.0.1:6380> hmset customer id 11 name lisi age 26 phone 15888888888
OK
127.0.0.1:6380> hmget customer id name age 
1) "11"
2) "lisi"
3) "26"
127.0.0.1:6380> HGETALL customer
1) "id"
2) "11"
3) "name"
4) "lisi"
5) "age"
6) "26"
7) "phone"
8) "15888888888"
127.0.0.1:6380> hdel customer age phone
(integer) 2
127.0.0.1:6380> HGETALL customer
1) "id"
2) "11"
3) "name"
4) "lisi"
127.0.0.1:6380> 

3.2 hlen

127.0.0.1:6380> HGETALL customer
1) "id"
2) "11"
3) "name"
4) "lisi"
127.0.0.1:6380> HLEN customer
(integer) 2
127.0.0.1:6380> 

    1. hexists key 在key里面的某个值的key
127.0.0.1:6380> HGETALL customer
1) "id"
2) "11"
3) "name"
4) "lisi"
127.0.0.1:6380> HEXISTS customer id
(integer) 1
127.0.0.1:6380> HEXISTS customer age
(integer) 0
127.0.0.1:6380> 

3.4 hkeys/hvals

127.0.0.1:6380> HKEYS customer
1) "id"
2) "name"
127.0.0.1:6380> HVALS customer
1) "11"
2) "lisi"
127.0.0.1:6380> 

3.5 hincrby/hincrbyfloat

hincrby:
127.0.0.1:6380> HGETALL customer
1) "id"
2) "11"
3) "name"
4) "lisi"
5) "age"
6) "20"
127.0.0.1:6380> HINCRBY customer age 1
(integer) 21
127.0.0.1:6380> HGETALL customer
1) "id"
2) "11"
3) "name"
4) "lisi"
5) "age"
6) "21"
127.0.0.1:6380> 

hincrbyfloat:
127.0.0.1:6380> HGETALL customer
1) "id"
2) "11"
3) "name"
4) "lisi"
5) "age"
6) "21"
7) "balance"
8) "10.5"
127.0.0.1:6380> HINCRBYFLOAT customer balance 0.3
"10.8"
127.0.0.1:6380> HGETALL customer
1) "id"
2) "11"
3) "name"
4) "lisi"
5) "age"
6) "21"
7) "balance"
8) "10.8"
127.0.0.1:6380> 

3.6 hsetnx

不存在赋值,存在了无效。
127.0.0.1:6380> HKEYS customer
1) "id"
2) "name"
3) "age"
4) "balance"
127.0.0.1:6380> HSETNX customer id 22
(integer) 0
127.0.0.1:6380> HSETNX customer email 1000@qq.com
(integer) 1
127.0.0.1:6380> 
127.0.0.1:6380> HKEYS customer
1) "id"
2) "name"
3) "age"
4) "balance"
5) "email"
127.0.0.1:6380> 

八、Redis有序集合Zset(sorted set)

1. 跟set的区别

在set基础上,加一个score值。之前set是k1 v1 v2 v3,现在zset是k1 score1 v1 score2 v2

2. 常用

命令 作用
zadd 添加,如果值存在添加,将会重新排序
zcard 查看zset集合的成员个数
zrange 查看Zset指定范围的成员,withscores为输出结果带分数
zrank 获取zset成员的下标位置,如果值不存在返回null
zcount 获取zset集合指定分数之间存在的成员个数
zrem 删除指定的一个成员或多个成员
zscore 获取指定值的分数
zincrby 给指定元素的分数进行增减操作,负值为减,正值为加
zrangebysocre 根据指定分数的范围获取值
zrevrange zrevrangebyscore 倒序,从高到底排序输出指定范围的数据
zremrangebyscore zremrangebyrank 根据坐标,分数范围删除数据
zpopmin 取出zset集合中分数最小的n条数据
zpopmax 取出zset集合中分数最大的n条数据

3. 案例

3.1 zadd/zrange -> withscores

 127.0.0.1:6380> zadd zset01 60 v1 70 v2 80 v3 90 v4 100 v5
(integer) 5
127.0.0.1:6380>
127.0.0.1:6380> ZRANGE zset01 0 -1
1) "v1"
2) "v2"
3) "v3"
4) "v4"
5) "v5"
127.0.0.1:6380> 
127.0.0.1:6380> ZRANGE zset01 0 -1
1) "v1"
2) "v2"
3) "v3"
4) "v4"
5) "v5"
127.0.0.1:6380> 

3.2 zrangebyscore key 开始score 结束score

127.0.0.1:6380> ZRANGE zset01 0 -1 withscores
 1) "v1"
 2) "60"
 3) "v2"
 4) "70"
 5) "v3"
 6) "80"
 7) "v4"
 8) "90"
 9) "v5"
10) "100"
127.0.0.1:6380> ZRANGEBYSCORE zset01 60 90
1) "v1"
2) "v2"
3) "v3"
4) "v4"
127.0.0.1:6380> ZRANGEBYSCORE zset01 60 (90
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6380> ZRANGEBYSCORE zset01 (60 (90
1) "v2"
2) "v3"
127.0.0.1:6380> 

127.0.0.1:6380> ZRANGE zset01 0 -1 withscores
 1) "v1"
 2) "60"
 3) "v2"
 4) "70"
 5) "v3"
 6) "80"
 7) "v4"
 8) "90"
 9) "v5"
10) "100"
127.0.0.1:6380> ZRANGEBYSCORE zset01 60 90 limit 2 2
1) "v3"
2) "v4"
127.0.0.1:6380>

3.3 zrem key 某score下对应的value值,作用是删除元素

删除元素,格式是zrem zset的key 项的值,项的值可以是多个
zrem key score某个对应值,可以是多个值
127.0.0.1:6380> ZRANGE zset01 0 -1 withscores
 1) "v1"
 2) "60"
 3) "v2"
 4) "70"
 5) "v3"
 6) "80"
 7) "v4"
 8) "90"
 9) "v5"
10) "100"
127.0.0.1:6380> zrem zset01 v5
(integer) 1
127.0.0.1:6380> ZRANGE zset01 0 -1 withscores
1) "v1"
2) "60"
3) "v2"
4) "70"
5) "v3"
6) "80"
7) "v4"
8) "90"
127.0.0.1:6380> 

3.4 zcard/zcount key score区间/zrank key values值,作用是获得下标值/zscore key 对应值,获得分数

zcard :获取集合中元素个数
zcount :获取分数区间内元素个数,zcount key 开始分数区间 结束分数区间
zrank: 获取value在zset中的下标位置
zscore:按照值获得对应的分数

127.0.0.1:6380> ZCARD zset01
(integer) 4
127.0.0.1:6380> ZCOUNT zset01 60 80
(integer) 3
127.0.0.1:6380> ZRANk zset01 v4
(integer) 3
127.0.0.1:6380> ZSCORE zset01 v4
"90"
127.0.0.1:6380>

3.5 zrevrank key values值,作用是逆序获得下标值

正序、逆序获得下标索引值
127.0.0.1:6380> zrange zset01 0 -1 withscores
1) "v1"
2) "60"
3) "v2"
4) "70"
5) "v3"
6) "80"
7) "v4"
8) "90"
127.0.0.1:6380> ZREVRANK zset01 v4
(integer) 0
127.0.0.1:6380> ZREVRANK zset01 v3
(integer) 1
127.0.0.1:6380> 

3.6 zrevrange

127.0.0.1:6380> zrange zset01 0 -1 
1) "v1"
2) "v2"
3) "v3"
4) "v4"
127.0.0.1:6380> ZREVRANGE zset01 0 -1
1) "v4"
2) "v3"
3) "v2"
4) "v1"
127.0.0.1:6380> 

3.7 zrevrangebyscore key 结束score 开始score

zrevrangebyscore zset1 90 60 withscores    分数是反着来的
127.0.0.1:6380> zrange zset01 0 -1 withscores
1) "v1"
2) "60"
3) "v2"
4) "70"
5) "v3"
6) "80"
7) "v4"
8) "90"
127.0.0.1:6380> ZREVRANGEBYSCORE zset01 90 60
1) "v4"
2) "v3"
3) "v2"
4) "v1"
127.0.0.1:6380>
本文含有隐藏内容,请 开通VIP 后查看