1、简介
Redis 的常用数据类型有十种,分别为:string、list、set、zset、hash、geo、hyperloglog、bitmap、bitfield、stream。熟练使用各种数据类型,能够快速结合场景进行使用。
注:我们所说的数据类型是指 value 的数据类型,key 都是字符串。
所有类型的命令查看:help @数据类型;例如 help @string
2、Redis 的 key 常用命令
# 1、查看当前库所有key
keys *
# 2、判断某个key是否存在
exists key
# 3、查看key的类型是什么
type key
# 4、删除指定的key,会发生阻塞
del key
# 5、非阻塞删除,仅仅将key从keyspace中删除,真正删除在后续异步操作中
unlink key
# 6、查看key还有多久过期,-1表示永不过期,-2表示已过期
ttl key
# 7、给key设置过期时间
expire key
# 8、将指定的key移动到指定的数据库
move key db_index[0-15]
# 9、切换数据库
select db_index[0-15]
# 10、查看当前库key的数量
dbsize
# 11、清空当前库
flushdb
# 12、清空全部数据库
flushall
3、Redis 字符串(string)
string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M,string类型是二进制安全的,redis的string可以包含任何数据,比如jpg图片或者序列化的对象 。
# 1、设置值
set key value [NX|XX] [EX seconds|KEEPTTL] # 设置过期时间,keepttl在覆盖值之后继承原来的过期时间
# 2、获取值
get key
# 3、同时设置多个值
mset key value [key1 value1 ...]
# 4、同时获取多个值
mget key [key1 ...]
# 5、设置值返回旧值
getset key value
# 6、同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在
msetnx key value [key1 value1 ...]
# 7、设置指定范围的值
setrange key index value # 从index开始,将index以及index之后的用value代替
# 8、获取指定范围的值,从零到负一表示全部
getrange key begin_index end_index # 获取[begin_index,end_index]范围的value
# 9、数值增减(value一定是整型数字才行)
incr/decr key # 增减1
incrby/decrby key num # 增减num
# 10、获取字符串长度
strlen key
# 11、内容追加
append key value
# 12、分布式锁
setnx key value # key不存在设置,存在设置不成功
setex key seconds # 设置过期时间
4、Redis 列表(list)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边),它的底层实际是个双端链表,最多可以包含 2^32 - 1 个元素(每个列表超过40亿个元素)。主要功能有push/pop等,一般用在栈、队列、消息队列等场景。left、right都可以插入添加;如果键不存在,创建新的链表;如果键已存在,新增内容;如果值全移除,对应的键也就消失了。
# 1、向列表中添加元素
lpush/rpush key value1 value2
# 2、获取元素
lpop/rpop key
# 3、指定下标获取元素
lrange key begin_index end_index # 获取下标范围为[begin_index,end_index]元素
# 4、按照索引下标获取元素
lindex key index
# 5、获取列表中元素个数
llen key
# 6、删除N个值为value的元素(从左往右删,如果N为0表示删除全部值为value的元素)
lrem key N value
# 7、截取指定范围的值,再赋值给key
ltrim key begin_index end_index # 范围为[begin_index,end_index]
# 8、移除列表的最后一个元素,并将该元素添加到另一个列表并返回
rpoplpush 源列表 目的列表
# 9、设置指定下标的值
lset key index value
# 10、在指定的value前后插入新值
linsert key before/after 已有value 插入的新值
5、Redis 哈希(hash)
Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。Redis 中每个 hash 可以存储 2^32 - 1 键值对(40多亿)。
# 1、设置hash值
hset hash_key k1 v1
# 2、获取hash值
hget hash_key k1
# 3、设置多个hash值
hmset hash_key k1 v1 k2 v2 ...
# 4、获取多个hash值
hmget hash_key k1 k2 ...
# 5、获取所有的hash值
hgetall hask_key
# 6、删除hash值
hdel hash_key k1 k2 ..
# 7、获取某个key的全部hash值数量
hlen hash_key
# 8、判断某个key中是否包含指定的hash值
hexists key k1
# 9、获取全部的key/value
hkeys/hvals hash_key
# 10、给指定的hash值增加
hincrby/hincrbyfloat hash_key k1 num
# 11、hash值不存在赋值,存在了无效
hsetnx hash_key k1 v1
6、Redis 集合(set)
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据,集合对象的编码可以是 intset 或者 hashtable。Redis 中Set集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。集合中最大的成员数为 2^32 - 1 (每个集合可存储40多亿个成员)。
# 1、添加元素
sadd key value1 value2 ...
# 2、遍历集合所有元素
smembers key
# 3、判断元素是否在集合中
sismember key value
# 4、删除元素
srem key value1 value2 ...
# 5、获取集合里面元素个数
scard key
# 6、从集合中随机选出指定个数个元素
srandmember key num
# 7、从集合中随机弹出一个元素,弹出后会删除
spop key
# 8、将一个集合中某个值移动到另一个集合
smove key1 key2 key1中的值
# 9、差集运算
sdiff key1 key2
# 10、并集
sunion key1 key2
# 11、交集
sinter key1 key2
# 12、Redis7新增命令,指定numkeys个key做交集,返回交集中元素个数,还可以通过limit限制
SINTERCARD numkeys key [key ...] [LIMIT limit]
7、Redis 有序集合(zset)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数,redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。zset集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 2^32 - 1(40多亿个)。
# 1、添加元素
zadd key score1 v1 score2 v2 ...
# 2、按照分数从小到大排序,返回指定范围数据
zrange key start end [withscores] # 范围为[start,end]
# 3、zrange反向操作
zrevrange key start end [withscores] # 范围为[start,end]
# 4、获取指定分数范围内的元素
zrangebyscore key [(]min max [withscores] [limit offset count] # 如果是开区间需要加(
# 5、获取元素分数
zscore key v1
# 6、获取集合中元素个数
zscard key
# 7、删除元素(可以删除多个)
zrem key v1 v2 ..
# 8、增加某个元素的分数
zincrby key num v1
# 9、获取指定分数范围内元素个数
zcount key min max # 范围为[min,max]
# 10、获取元素下标值
zrank key v1
# 11、获取逆序下标值
zrevrank key v1
8、总结
本文详细介绍Redis 常用的五种数据结构:string、list、set、zset、hash,从使用命令入手,熟悉每个数据结构的使用场景和使用方式,帮助大家更加深入熟悉Redis。后文将介绍Redis另外五种数据结构。
本人是一个从小白自学计算机技术,对运维、后端、各种中间件技术、大数据等有一定的学习心得,想获取自学总结资料(pdf版本)或者希望共同学习,关注微信公众号:it自学社团。后台回复相应技术名称/技术点即可获得。(本人学习宗旨:学会了就要免费分享)