文章目录
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>
-
- 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 后查看