Redis常用数据类型操作命令


🌈 个人主页: Hygge_Code
🔥 热门专栏:从0开始学习Java | Linux学习| 计算机网络
💫 个人格言: "既然选择了远方,便不顾风雨兼程"

文章目录


论文投稿

会议官网会议官网【投稿 / 参会】

论文出版:


Redis 常用数据类型操作命令

以下是五种常用的数据类型:

  • String(字符串)
  • List(列表)
  • Hash(哈希)
  • Set(集合)
  • ZSet(有序集合)

一、String 字符串

最基础、最常用的类型,可存:字符串、数字、JSON 串、图片二进制。

常用命令

  • set key value 设置值
  • get key 获取值
  • setnx key value 不存在才设置
  • setex key 秒数 value 设置key的值的同时,也设置过期时间
  • incr key 自增
  • decr key 自减
  • mset k1 v1 k2 v2 批量设置
  • mget k1 k2 批量获取

二、List 列表

List的数据结构为快速链表quickList。Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。它的底层是个双向链表 ,对两端的操作性能很高,但是通过索引下标操作中间的节点性能会较差。

 具体结构:首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是zpst ,也即是压缩列表 。它将所有的元素紧挨着一起存储,分配的是一块连续的内存,当数据量比较多的时候才会改成quicklist。.

因为普通的链表需要的附加指针空间太大,会比较浪费空间。Redis:将链表和ziplist结合起来组成了quicklist。也就是将多个ziplist使用双向指针串起来使用。这样既满足了快速的插入删除性能,又不会出现太大的空间冗余。

常用命令

  • lpush key value1 value2 左边插入
  • rpush key value1 value2 右边插入
  • lpop key 左边弹出
  • rpop key 右边弹出
  • lrange key 0 -1 获取列表范围内元素
  • llen key 获取列表长度

三、Hash 哈希

Hash类型对应的数据结构是两种:ziplist(压缩列表),hashtable(哈希表)。当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable。

常用命令

  • hset key field value 设置一个字段
  • hget key field 获取一个字段
  • hgetall key 获取所有字段和值
  • hkeys key 获取所有字段
  • hvals key 获取所有值
  • hexists key field 判断字段是否存在

四、Set 集合

Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set可以自动去重,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的命令,这个也是list所不能提供的。

Redis的Set是string类型的无序集合。它底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都是 O(1)

常用命令

  • sadd key value1 value2 添加元素
  • smembers key 查看所有元素
  • sismember key value 判断是否存在
  • srem key value 删除元素
  • sinter key1 key2 取两个集合交集
  • sunion key1 key2 取并集

五、ZSet 有序集合

Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个评分(score),这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员(自动排序 好了)。集合的成员是唯一的,但是评分可以是重复的

zset底层 使用了两个数据结构:

(1)hash,hash的作用就是关联元素value和权重score,保障元素value的唯一性,可以通过元素value找到相应的score值。

(2)跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表(跳跃表效率堪比红黑树,实现远比红黑树简单)。
对比有序链表和跳跃:

  • 有序链表

    查找值为51的元素 ,需要从第一个元素开始依次查找、比较才能找到。共需要6次比较
  • 跳跃表

    1. 第 2 层: 从头节点 1 开始,向后比较到 21。21 < 51,但下一个是 NULL,所以从 21 下到第 1 层。
    比较次数:1 次(1 → 21)
    2. 第 1 层: 从 21 开始,向后比较到 41。41 < 51,继续向后到 61。61 > 51,所以从 41 下到第 0 层。
    比较次数:2 次(21 → 41,41 → 61)
    3. 第 0 层: 从 41 开始,向后比较到 51。51 就是目标节点,查找结束。
    比较次数:1 次(41 → 51)
    总的比较次数为4次

总计比较次数:1+2+1=4 次

常用命令

  • zadd key score1 value1 score2 value2 添加元素
  • zrange key 0 -1 正序取范围
  • zrevrange key 0 -1 倒序取范围
  • zrank key value 获取排名
  • zscore key value 获取分数

六、通用命令

任何类型都能用:

  • keys * 查看所有 key
  • exists key 检查 key 是否存在
  • del key 删除 key
  • expire key 秒数 设置过期时间(得先设置了key才行)
  • ttl key 查看过期时间

如果我的内容对你有帮助,请 点赞 , 评论 , 收藏 。创作不易,大家的支持就是我坚持下去的动力!

相关推荐
后端AI实验室3 小时前
用AI写代码,我差点把漏洞发上线:血泪总结的10个教训
java·ai
程序员清风5 小时前
小红书二面:Spring Boot的单例模式是如何实现的?
java·后端·面试
belhomme5 小时前
(面试题)Redis实现 IP 维度滑动窗口限流实践
java·面试
Be_Better5 小时前
学会与虚拟机对话---ASM
java
悟空聊架构6 小时前
基于KaiwuDB在游乐场“刷卡+投币”双模消费系统中的落地实践
数据库·后端·架构
IvorySQL6 小时前
PostgreSQL 技术日报 (3月4日)|硬核干货 + 内核暗流一网打尽
数据库·postgresql·开源
开源之眼8 小时前
《github star 加星 Taimili.com 艾米莉 》为什么Java里面,Service 层不直接返回 Result 对象?
java·后端·github
Maori3168 小时前
放弃 SDKMAN!在 Garuda Linux + Fish 环境下的优雅 Java 管理指南
java
用户908324602739 小时前
Spring AI 1.1.2 + Neo4j:用知识图谱增强 RAG 检索(上篇:图谱构建)
java·spring boot
进击的丸子9 小时前
虹软人脸服务器版SDK(Linux/ARM Pro)多线程调用及性能优化
linux·数据库·后端