Redis数据类型
今天回顾了一下Redis的数据类型
Redis有5种数据类型
-
String类型(基本类型 可存图片)
-
hash类型(键值对的结合 可存对象)
-
list类型(链表结构的集合)
-
set类型(无序集合)
-
zset类型(有序集合)
String类型
String是Redis最基本的数据类型 结构是key,value的形式 类似map集合
String类型二进制安全的 可以存储序列化的数据 比如一张图片
String类型的最大能存储512M。
基本语法
-
set key value -> 存入键值对
-
get key -> 根据键取出值
-
incr key -> 把值递增1
-
decr key -> 把值递减1
-
del key -> 根据键删除键值对
-
setex key timeout value -> 存入键值对,timeout表示失效时间,单位s
-
ttl key->可以查询出当前的key还剩余多长时间过期
-
setnx key value -> 如果key已经存在,不做操作, 如果key不存在,直接添加
进阶语法
-
incrby key num -> 偏移值
-
mset k1 v1 k2 v2 ... -> 批量存入键值对
-
mget k1 k2 ... -> 批量取出键值
-
append key 'value' -> 原值后拼接新内容
-
setnx key value -> 存入键值对,键存在时不存入
-
setex key timeout value -> 存入键值对,timeout表示失效时间,单位s
-
ttl ->可以查询出当前的key还剩余多长时间过期
-
setrange key index value -> 修改键对应的值,index表示开始的索引位置
hash类型
Hash类型是String类型的 field 和 value 的映射表,或者说是一个String集合。
它特别适合存储对象,相比较而言,将一个对象存储在Hash类型里要比存储在String类型里占用更少的内存空间,并方便存储整个对象。
Redis 中每个 hash 最多可以存储 2^32 - 1 键值对(40多亿)。
基本语法
-
hset key hashkey hashvalue -> 存入一个hash对象
-
hget key hashkey -> 根据hash对象键取去值
-
hexists key hashkey -> 判断hash对象是含有某个键
-
hdel key hashkey -> 根据hashkey删除hash对象键值对
进阶语法
-
hincrby key hashkey 递增值 -> 递增hashkey对应的值
-
hlen key -> 获取hash对象键的数量
-
hkeys key -> 获取hash对象的所有键
-
hvals key -> 获取hash对象的所有值
-
hgetall key -> 获取hash对象的所有数据
-
同样有hsetnx,其作用跟用法和setnx一样
list类型
Redis中的List类似Java中的queue,也可以当做List来用。
List类型是一个链表结构的集合,其主要功能有push,pop,获取元素等。
更详细的说,List类型是一个双端链表的结构,我们可以通过相关操作进行集合的头部或者尾部添加删除元素,list的设计非常简单精巧,即可以作为栈,又可以作为队列。能满足绝大多数需求。
基本语法
-
rpush key value -> 往列表右边添加数据
-
lrange key start end -> 范围显示列表数据,全显示则设置0 -1
-
lpush key value -> 往列表左边添加数据
-
lpop key -> 弹出列表最左边的数据
-
rpop key -> 弹出列表最右边的数据
-
llen key -> 获取列表长度
进阶语法
-
linsert key before/after refVal newVal -> 参考值之前/后插入数据
-
lset key index value -> 根据索引修改数据
-
lrem key count value -> 在列表中按照个数删除数据
-
ltrim key start end -> 范围截取列表
-
lindex key index -> 根据索引取列表中数据
set集合
Set集合是string类型的无序集合,set是通过hashtable实现的,对集合我们可以取交集,并集,差集。并且支持随机获取元素。
Set集合成员是唯一的,这就意味着集合中不能出现重复的数据,如果插入重复元素,Redis会忽略该操作。
Set集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
基本语法
-
sadd key value -> 往set集合中添加元素
-
smembers key -> 列出set集合中的元素
-
srem key value -> 删除set集合中的元素
-
spop key count -> 随机弹出集合中的元素
进阶语法
-
sdiff key1 key2 -> 返回key1中特有元素(差集)
-
sdiffstore var key1 key2 -> 返回key1中特有元素存入另一个set集合
-
sinter key1 key2 -> 返回两个set集合的交集
-
sinterstore var key1 key2 -> 返回两个set集合的交集存入另一个set集合
-
sunion key1 key2 -> 返回两个set集合的并集
-
sunionstore var key1 key2 -> 返回两个set集合的并集存入另一个set集合
-
smove key1 key2 value -> 把key1中的某元素移入key2中
-
scard key -> 返回set集合中元素个数
-
sismember key value -> 判断集合是否包含某个值
-
srandmember key count -> 随机获取set集合中元素
zset集合
zset有序集合和set集合一样也是String类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。Redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
集合中最大的成员数为 2^32 - 1 ,即每个集合最多可存储40多亿个成员。
需要注意的是,Redis有序集合是默认升序的,score越低排名越靠前,即score越低的元素下标越小。
基本语法
zadd key score column -> 存入分数和名称
zincrby key score column -> 偏移名称对应的分数
zrange key start end -> 按照分数升序输出名称
zrevrange key start end -> 按照分数降序输出名称
zrank key name -> 升序返回排名
zrevrank key name -> 降序返回排名
zcard key -> 返回元素个数
进阶语法
zrangebyscore key min max [withscores] -> 按照分数范围升序输出名称
zrevrangebyscore key max min [withscores] -> 按照分数范围降序输出名称
zrem key name -> 删除名称和分数
zremrangebyscore key min max [withscores] -> 根据分数范围删除元素
zremrangebyrank key start end -> 根据排名删除元素
zcount key min max -> 按照分数范围统计个数
总结
1>如果要排序选用zset
2>如果数据是多个且允许重复选用list
3>如果数据是多个且不允许重复选用set
4>剩下的使用string
5>如果是对象类型也可使用hash
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?