Redis的数据类型选择
发表于|更新于|后端
|浏览量:
String
几乎所有的数据都可以使用 String 来存储。

- 浪费存储空间,key 也是需要存储空间的
- 管理、维护成为噩梦,Redis 中存在着大量的 KV 对象
- key 冲突的几率变高(不同的业务系统共用一个 Redis 服务)
常用的数据类型及其适用场景
- string:应用最为广泛的数据类型,例如:计数器,session 等键值“独立〞的数据
- hash:存储结构化(对象)的数据,KV 共同构成一个对象的信息
- list:队列、栈、有界队列
- set:去重、无序的数据集合,在类似于社交的业务功能上有广泛应用,例如:共同关注、共同喜好、数据去重
- sortedset:带有权重的集合,在类似于排行榜业务上有广泛应用,且可以实现范围查找
文章作者: 褚成志
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 褚成志的分享站!
相关推荐
2026-04-09
Redis核心数据类型的底层编码(C源码)(重要)
Redis K-V 底层设计原理:字典hashtablekey:string val:string、hash、list、set、sorted set map 就是字典,还要支持海量数据的存储,查找和插入删除(hashtable) hashtable 里面 hash(key) % hashtable.size ,最后的得到的就是[0, hashtable.size - 1] hash碰撞的时候,线性探测或者链表法。Redis 使用的是链表法 注意这个hashtable里面的value的类型是五种常见类型谁都可以放,因为最后都是使用指针指向的,value的包装类里面会执行是什么数据类型。 redisDb–dict–dictht–dictEntry–redisObject Redis 渐进式rehash及动态扩容机制如图所示, 扩容时机:在使用的容量是大小的一样的时候就会扩容, 扩容大小:扩容的时候变为原来的2倍, 渐进式迁移:新建数组之后,数据迁移的时候,一个链表上的数据是一个桶为单位转移的,不能一下全部转移会导致单线程阻塞,所以有了渐进式rehash的设计,dict字典包...
2026-04-09
Redis不同数据类型代码场景实践
string博客不好的实现12345jedis.set("key1", "value1");jedis.get("key1");jedis.del("lock_test");jedis.incr("blog_id_counter");Long key = jedis.incrBy("key", 1); 1jedis.set("lock_test", "value_test", SetParams.setParams().nx()); 12345678Long publishBlogResult = jedis.msetnx("article:1:title", "学习Redis", "article:1:content", "如何学好redis的使用", "art...
2026-04-09
Redis的数据结构
Redis的数据结构重要:Redis 为什么用跳表而不用平衡树? https://juejin.cn/post/6844903446475177998 https://mp.weixin.qq.com/s?__biz=MzA4NTg1MjM0Mg==&mid=509777776&idx=1&sn=e56f24bdf2de7e25515fe9f25ef57557&mpshare=1&scene=1&srcid=1010HdkIxon3icsWNmTyecI6#rd Redis的对象系统中的每种对象实际上都是基于使用场景选择多种底层数据结构实现的,比如ZSET就是基于【压缩列表】或者【跳跃表+字典】(这也跟之前排序中提到的Sort包实现的思想一样,基于数据规模选择合适的排序算法),体现了Redis对于性能极致的追求。 https://cloud.tencent.com/developer/article/1353762
2026-04-09
布隆过滤器
布隆过滤器布隆过滤器由「初始值都为 0 的位图数组」和「 N 个哈希函数」两部分组成。当我们在写入数据库数据时,在布隆过滤器里做个标记,这样下次查询数据是否在数据库时,只需要查询布隆过滤器,如果查询到数据没有被标记,说明不在数据库中。 第一步,使用 N 个哈希函数分别对数据做哈希计算,得到 N 个哈希值; 第二步,将第一步得到的 N 个哈希值对位图数组的长度取模,得到每个哈希值在位图数组的对应位置。 第三步,将每个哈希值在位图数组的对应位置的值设置为 1; 查询的时****候只要有一个为 0,就认为数据 x 不在数据库中。 没有的一定没有,有的也可能没有 黑名单,爬虫去重 只有加入和查询,不要求删除, 极大减少内存, 但是必须允许一定程度的失误率,会误杀好人,但是不会漏杀坏人 布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure),特点是高效地插入和查询,可以用来告诉你** “某样东西****一定不存在或者可能存在****”。** 如果存在那就是可能存在(hash的碰撞) 如果不存在那就一定不存在 相比于传统的...
2026-04-09
Redis监控
视图预览阿里云 Redis 标准版指标展示,包括CPU 使用率,内存使用率,磁盘读写,网络流量,每秒访问次数等 版本支持操作系统支持:Linux 前置条件 服务器 <安装 Datakit> 服务器 <安装 Func 携带版> 阿里云 RAM 访问控制账号授权 RAM 访问控制 登录 RAM 控制台 https://ram.console.aliyun.com/users 新建用户:人员管理 - 用户 - 创建用户 保存或下载 AccessKey ID 和 AccessKey Secret 的 CSV 文件 (配置文件会用到) 用户授权 (只读访问所有阿里云资源的权限) 安装配置说明: 示例 Linux 版本为:CentOS Linux release 7.8.2003 (Core) 通过一台服务器采集所有阿里云 Redis 标准版数据 部署实施脚本市场 登录 Func,地址 http://ip:8088 开启脚本市场,管理 - 实验性功能 - 开启脚本市场模块 **依次添加 **三个脚本集 观测云集成 (核心包) 观测云...
2026-04-09
Redis知识点汇总
Redis快速回忆核心数据结构 字符串小于1M,成倍扩容,大于1M,就每次扩容1M,最大512M。 哈希 购物车 列表 集合 有序集合 位图 Bitmap虽然基于String类型,但是可以直接操作位 一个字节8位表示一个用户是数据 使用的时候把握住偏移量即可 集成springboot 一般都会自定义,JDK的序列化方式存的数据不能直接查看 核心原理持久化机制持久化命令bgsave 是异步的 save 是同步的 RDB AOF 混合模式 快照的时候,增量的数据使用AOF的方式 分布式锁演进过程本地锁和分布式锁减库存的时候多线程 无法释放锁的情况处理出现异常的话,就无法释放锁 服务器断了,下面的锁还是无法释放 设置超时时间,但是不能不是原子性操作 合并为原子性操作,但是自己的锁可能被别人释放,因为别人的锁可能过期没了 自己的锁被别人删除怎么办解决办法一:值相同的时候才可以删除掉 解决办法二:给锁续命,防止线程还在执行的时候锁就失效 redission 看门狗机制 **看门狗作用:**每隔十...
公告
👋 你好,我是褚成志,一名专注于云原生与后端架构的工程师。
热爱 Java、Kubernetes、Linux、Redis、Spring 等技术领域,持续探索 AGI 与智能化运维的边界。
这里记录我的技术思考与实践总结,欢迎交流!
热爱 Java、Kubernetes、Linux、Redis、Spring 等技术领域,持续探索 AGI 与智能化运维的边界。
这里记录我的技术思考与实践总结,欢迎交流!