
Redis从入门到超神
文章平均质量分 90
乖巧程序员
大家好,我是一名热爱编程的程序员,专注于Java、Spring Boot、SpringCloud、SpringCloudAlibaba、Redis、MQ、MongoDB等后端技术,同时熟悉Vue.js和React等前端框架。拥有多年开发经验,擅长解决复杂问题,注重代码质量和架构设计。
我热衷于技术分享,希望通过优快云平台将自己的经验和知识传递给更多的朋友。我的博客内容涵盖最新技术的学习笔记、项目开发实战心得、技术面试题解析和常见问题解决方案。
欢迎大家关注我,共同探索编程的乐趣。你的支持是我持续分享的动力,期待在评论区与大家交流讨论。关注我,不迷路,技术干货不断,与你一起进步!
展开
-
Redis从入门到超神-(十二)Redis监听Key的过期事件
试想一个业务场景,订单超过30分钟未支付需要做自动关单处理,修改订单状态库存回退等,你怎么实现?方案一:可以使用定时任务扫表,通过支付状态和下单时间来判断是否支付过期。但是这样的方案是非常消耗性能的,因为大部分的定时扫表都是无效的,而且这种定时任务方案对于时间控制并不精确。类似的业务场景还很多,比如物流自动收货确认,比如某电影上线预约功能的到时提醒等等,对于这些问题有没有比定时任务更优雅的处理方案呢?原创 2024-07-26 09:49:50 · 502 阅读 · 0 评论 -
Redis从入门到超神-(十一)Redis五大基本结构SortedSet底层原理
有序集合可以看做是在Set集合的的基础上为集合中的每个元素维护了一个顺序值: score,它允许集合中的元素可以按照score进行排序,所以它的经典实用场景如:考生按分数排名,某游戏玩家分数排行,网站首页某数据排行,最新评论按时间排序等等。Redis是一个内存数据库,它在保证读写速度的同时也需要考虑内存开销,那对于SortedSet有序集合而言它需要维护一个顺序值,而对于有序集合的底层实现可以选择:数组,链表,平衡树或者红黑树等结构,但是SortedSet没有选择这些结构。原创 2024-07-26 09:30:41 · 1088 阅读 · 0 评论 -
Redis从入门到超神-(十)Redis五大基本结构Hash底层原理
Hash也是Redis中非常常用的一种存储结构了,Redis的Hash底层用到了两种存储结构,ziplist压缩列表和hash 表,当存储的所有键值对的键和值的字符串长度都小于64字节,且元素个数少于512个,Redis会选择ziplist存储,这样会比较省内存,否则他会选择hashtable hash表去存,这里的hash表它底层结构和Java中的HashMap比较像,都是数组+链表,链表是为了解决hash冲突。原创 2024-07-25 09:49:31 · 1324 阅读 · 0 评论 -
Redis从入门到超神-(九)Redis五大基本结构Set底层原理
Redis中的set和java中的set集合有相似之处,它的元素不会按照插入的向后顺序而存储,且元素是不允许重复的。set内部使用到了intset(整数集合)和hashtable(哈希表)两种方式来存储元素,如果set存储的元素是整数,且当元素个数小于512个会选择intset存储,目的是减少内存空间,遇到两种情况会发生变化,就是当存储的元素个数达到512(通过set-max-intset-entries 配置)或者添加了非整数值时如:‘b’,set会选择hashtable作为存储结构。原创 2024-07-25 09:37:22 · 1183 阅读 · 0 评论 -
Redis从入门到超神-(八)Redis五大基本结构List底层原理
Redis中的List也是一种非常常用的存储结构,它和Java中的List结构类似,通常用来存储一个列表或者作为队列实现,在Redis 3.2之前,list采用了两种数据结构作为底层实现:压缩列表ziplist以及双向链表adlist,在3.2之后,使用quicklist替代,本篇文章将带你了解Redis底层的三种存储结构。本篇文章介绍了Redis中的list存储结构的底层实现,在Redis3.2之前使用到了 双向链表(adlist)和压缩列表(ziplist)。原创 2024-07-24 10:42:34 · 1295 阅读 · 0 评论 -
Redis从入门到超神-(七)Redis五大基本结构String底层原理
Redis已经成为解决高并发的必备利器,你可能已经把它玩的很熟了,但是对于它的底层,你又了解几分呢?本篇文章我们来聊聊Redis中那些你不知道的秘密之Redis五大基本结构的实现原理。你也许知道Redis常用的存储结构有,但还远远不够,本文章将带你一步一步走进Redis更深处的奥秘。简单动态字符串SDS//字符串长度,即buf已用字节的数量int len;// 记录 buf 数组中未使用字节的数量int free;// 字节数组,用于保存字符串char buf[];SDS内存分配图。原创 2024-07-24 09:41:57 · 928 阅读 · 0 评论 -
Redis从入门到超神-(六)SpringCache操作缓存
对于缓存声明,Spring的缓存提供了一组java注解:@Cacheable写入缓存清除缓存@CachePut更新缓存@Caching组合多个缓存操作:设置类级别上共享的一些常见缓存设置。原创 2024-07-23 13:47:16 · 862 阅读 · 0 评论 -
Redis从入门到超神-(五)Redis实现分布式锁原理
指定了解锁时间,Redisson就不会再自动续期,那么如果在线程A业务还没执行完就自动解锁了,这时候线程B获取到锁,继续执行业务,那么等线程A业务执行完释放锁就可能会把线程B的锁删除,当然这种情况Redisson会报异常,但是这种情况是没有把所有线程都锁住的,所以如果要手动设定过期时间需要让过期时间比业务逻辑执行的时间长才对。但是上面的代码依然有问题,就是判断锁的代码和删除锁的代码也不是原子性的,依然可能会导致锁的误删除问题,比如服务A在判断锁成功准备删除锁时,锁自动过期,别的服务B获取到了锁,然后。原创 2024-07-23 11:39:40 · 2349 阅读 · 1 评论 -
Redis从入门到超神-(四)Redis高级特性
单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。原创 2024-07-22 10:54:11 · 1059 阅读 · 0 评论 -
Redis从入门到超神-(三)Redis在项目中的应用场景
Redis 是一个开源的高性能键值对数据库,它以其内存中数据存储、键过期策略、持久化、事务、丰富的数据类型支持以及原子操作等特性,在许多项目中扮演着关键角色。Redis 的使用场景非常广泛,可以根据项目的具体需求来选择合适的应用方式。针对Redis作为缓存层的使用场景,我将提供一个简单的Java Spring Boot应用案例,该应用使用Redis缓存来提高数据库查询的效率。假设我们有一个在线书店,用户可以查看书籍的详细信息。每次用户请求书籍详情时,后端需要查询数据库以获取书籍信息。转载 2024-07-19 14:32:53 · 940 阅读 · 0 评论 -
Redis从入门到超神-(二)认识Redis五大数据结构
ZRANGEBYSCOREkey heights 0 170 WITHSCORES LIMIT 0 10 #查询heights中0-170分之间的元素,低到高排序,0条 #开始查询,每页10条。hmset user:2 name zs age 18 #给"user:2"这个key设置name=zs键值对和age=18键值对。原创 2024-07-18 21:50:11 · 497 阅读 · 1 评论 -
Redis从入门到超神-(一)认识&安装Redis
NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,它泛指非关系型的数据库。随着互联网2003年之后web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的交友类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。Redis 是一个高性能的、开源的、C语言写的Nosql(非关系型数据库),数据保存可以存储在内存中或者磁盘中。原创 2024-07-17 18:03:28 · 473 阅读 · 0 评论