Redis 基本数据类型
在 Redis 中的数据以 key-value 键值对的形式存储,其中 key 是字符串类型的,value 可以有不同的类型,我们所说的 Redis 数据类型,也就是 value 的类型。下边我们来了解一些 key 的常用操作,以及 value 的数据类型。
Redis 中默认有16个数据库,默认使用0号数据库来保存数据,可以通过select index
切换,index 是数据库编号[0, 15]
一、key 的常见操作
-
flushall
:清空所有数据库中的数据 -
flushdb
:清空当前选中数据库中的数据 -
keys pattern
:根据正则表达式查看对应的 key,例如 keys * 可以查看全部的 key -
exists key
:查看 key 是否存在 -
del key
:删除 key 对应的数据 -
expire key seconds
:设置 key 的过期时间 ,单位秒 -
ttl key
:(time to live)查询 key 还剩多久过期 -
type key
:查看 key 对应的值的类型
二、String
Redis 中的字符串是动态的,内容是可以修改的,一般情况下分配的内存空间是大于需要的,扩容时会在现有内存空间上加倍,最大分配512M内存空间。
-
set
:给 key 赋值,不存在则返回 nil
set name zhangsan
-
setex
:赋值,并指定过期时间,单位秒
setex name 10 zhangsan
-
setnx
:同样可以给 key 赋值,如果 key 对应的值已经存在,不会覆盖旧值
setnx name lisi
-
get
:获取 key 的值
get name
-
getrange
:按索引区间返回 key 对应 value 的子串,是闭区间,从左往右时索引从0开始,从右往左时索引从-1开始
getrange name 0 4
getrange name 0 -1
-
setrange
:从指定索引开始,用新值替换原来的值
setrange name 5 wuji
-
append
:如果 key 已经存在,则直接在对应的 value 后追加值,否则创建新的键值对
append name feng
-
getset
:获取 key 的值,并重新赋值
getset name lisi
-
strlen
:计算字符串长度
strlen name
-
incr
:如果 key 对应的字符串是整数,可以给值增加1
incr age
-
incrby
:功能和 incr 类似,但 incrby 可以指定增加的步长
incrby age 2
-
decr
:如果 key 对应的字符串是整数,可以给值减小1
decr age
-
decrby
:功能和 decr 类似,decrby 可以指定减小的步长
decrby age 2
-
mset
:同时设置多个值
mset k1 v1 k2 v2
-
mget
:同时获取多个值
mget k1 k2
-
msetnx
:同时获取多个值,但不会覆盖已经存在的旧值
msetnx k1 v1 k2 v22
三、List
List 简单的理解就是列表,里边的元素可以重复,本质上是一个链表,在 Redis 中 List 可以实现队列(rpush+lpop)和栈(rpush+rpop)的功能。
-
lpush
:将值插入到 key 对应列表的头部(左插入),也就是索引为0的位置,如果是第一次 push 操作,则会先创建一个空的列表,再插入值,可以单条插入,也可以批量插入
lpush list1 a
lpush list1 b
lpush list1 c
-
lrange
:返回列表中指定索引区间的元素,这里是闭区间,也就是查询操作
lrange list1 0 1
结果如下:
-
rpush
:将值插入到 key 对应列表的头部尾部(右插入),也就是索引为(列表长度-1)的位置,其它的特点和 lpush 一致,批量插入几条数据
rpush list2 x y z
再使用lrange
查询一下,注意对比和上边lpush
方式插入数据后的查询结果:
-
lpop
:从列表头部移除指定个数的元素,并返回元素
lpop list1 1
-
rpop
:从列表尾部移除指定个数的元素,并返回元素
rpop list1 1
-
lrem
:从列表中移除指定个数的指定的元素
lrem list2 2 x
-
lindex
:通过索引获取列表中的值
lindex list2 0
-
ltrim
:通过索引区间对列表进行裁剪,会直接修改原列表
ltrim list2 3 5
-
rpoplpush
:从第一个列表尾部移除一个元素,放到第二个列表头部
rpoplpush list2 list1
-
linsert
:在列表中指定元素的前边或后边插入新元素
linsert list2 before y x
linsert list2 after y z
-
lset
:更新列表中指定索引的值,小心索引越界的问题
lset list2 1 m
-
llen
:计算列表的长度
llen list2
四、Set
Set 集合中的元素是无须、不会重复的。
-
sadd
:添加一个或多个元素
sadd set1 a
sadd set1 a b c
-
smembers
:获取指定 key 对应 Set 中的全部元素
smembers set1
-
srem
:移除 Set 中一个或多个指定元素
srem set1 b c
-
spop
:随机移除 Set 中一个或多个元素
spop set1 1
spop set1 2
-
srandmember
:随机返回 Set 中的一个或多个元素
srandmember set1 1
srandmember set1 2
-
smove
:将第一个 Set 中的指定元素移动到第二个 Set 中:
smove set1 set2 c
-
sdiff
:计算第一个 Set 和后边 Set 之间的差集,并返回结果
sdiff set1 set2
-
sinter
:计算多个 Set 之间的交集,并返回结果
sinter set1 set2
-
sunion
:计算多个 Set 之间的并集,并返回结果
sunion set1 set2
-
sdiffstore
:和 sdiff 功能类似,但不直接返回结果,而是将结果保存到新的 Set 中
sdiffstore set3 set1 set2
-
sinterstore
:和 sinter 功能类似,但不直接返回结果,而是将结果保存到新的 Set 中 -
sunionstore
:和 sunion 功能类似,但不直接返回结果,而是将结果保存到新的 Set 中 -
scard
:计算 Set 中的元素个数
scard set1
五、Hash
在 Hash 类型的数据结构中,value 是一个 field-value 键值对,类似于 Map。
-
hset
:添加数据,如下添加一个 key 为 hash1 value 为 name zhangsan 键值对的 Hash 类型数据
hset hash1 name zhangsan
也可以批量添加
hset hash1 age 18 email zhangsan@163.com
之前还可以使用hmset
命令进行批量添加,但在 Redis4.0.0 后已经过时,不建议使用了。
-
hget
:获取值
hget hash1 name
-
hmget
:批量获取数据
hmget hash1 age mail
-
hsetnx
:如果存在 key field 对应的值则不覆盖原值,而不是直接覆盖,不存在才会添加,
hsetnx hash1 age 20
-
hkeys
:获取 Hash 中所有的 field
hkeys hash1
-
hvals
:获取 Hash 中所有的 value
hvals hash1
-
hgetall
:获取 Hash 中所有的 field、value
hgetall hash1
-
hdel
:根据 field 删除 Hash 中的键值对
hdel hash1 age email
-
hexists
:根据 field 判断数据是否存在
hexists hash1 name
-
hincrby
:filed 对应的值是整数时,可以将值增加指定大小,指定的数字为负数也就是减小指定大小
hincrby hash1 age 2
-
hincrbyfloat
:针对 float 类型值的增加、减小 -
hlen
:计算 Hash 中键值对的数量
hlen hash1
六、ZSet
ZSet 可以看做是 Set 的增强版,增加了一个score
(成绩/得分)字段,是数字,可以用来排序,这样也就保证了集合中数据的有序性。
-
zadd
:添加一个或多个元素,下边的数据就是 score
zadd zset1 3 a
zadd zset1 2 b 1 c 5 d 4 e
-
zrange
:按照索引区间(闭区间)返回元素,元素默认按照 score 升序排列,withscores
参数的作用是返回元素时携带对应的 score,可以根据需要添加
zrange zset1 0 -1 withscores
-
zrevrange
:和 zrange 功能类似,但返回的元素按 score 降序排列
zrevrange zset1 0 -1 withscores
-
zrangebyscore
:按照 score 区间返回元素,可以使用-inf
和+inf
表示正‘负无穷大,元素会按照 score 升序排列
zrangebyscore zset1 2 4 withscores
-
zrevrangebyscore
:功能和 zrangebyscore 类似,但返回的元素按 score 降序排列
zrevrangebyscore zset1 4 2 withscores
还可以添加分页功能limit offset count
,取出 score 最高的前几个元素
zrevrangebyscore zset1 +inf 0 withscores limit 0 3
-
zscore
:获取指定元素的 score
zscore zset1 d
-
zrem
:移除元素
zrem zset1 e
-
zcard
:计算集合中的元素个数
zcard zset1
-
zcount
:计算 score 在指定区间内的元素个数
zcount zset1 2 4
-
zincrby
:增加指定元素的 score,负数则是减小
zincrby zset1 2 d
-
zrank
:返回指定元素的索引,是按 score 升序排列时的索引
zrank zset1 d
-
zrevrank
:返回指定元素的索引,是按 score 降序排列时的索引