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

本文深入解析Redis的五大数据类型(字符串、哈希、列表、集合和有序集合),包括基本命令、实战案例和各数据类型的特点,助你快速掌握Redis的数据管理技巧。

文章目录

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值