![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis
文章平均质量分 73
_蓝天IT_
让亿万孩子同在蓝天下共享优质教育
展开
-
Redis事务
2而事务则是实现在服务器端的行为,用户执行MULTI命令时,服务器会将对应这个用户的客户端对象设置为一个特殊的状态,在这个状态下后续用户执行的查询命令不会被真的执行,而是被服务器缓存起来,直到用户执行EXEC命令为止,服务器会将这个用户对应的客户端对象中缓存的命令按照提交的顺序依次执行。例如在社交网站上用户A关注了用户B,那么需要在用户A的关注表中加入用户B,并且在用户B的粉丝表中添加用户A,这两个行为要么全部执行,要么全部不执行,否则会出现数据不一致的情况。原创 2024-04-19 10:39:31 · 1138 阅读 · 0 评论 -
Redis高级数据结构HyperLogLog
HyperLogLog(Hyper[ˈhaɪpə®])并不是一种新的数据结构(实际类型为字符串类型),而是一种基数算法,通过HyperLogLog可以利用极小的内存空间完成独立总数的统计,数据集可以是IP、Email、ID等。如果统计 PV 那非常好办,给每个网页一个独立的 Redis 计数器就可以了,这个计数器的 key 后缀加上当天的日期。这样来一个请求,incrby 一次,最终就可以统计出所有的 PV 数据。。通过 scard 可以取出这个集合的大小,这个数字就是这个页面的 UV 数据。原创 2024-04-19 10:35:22 · 655 阅读 · 0 评论 -
Redis的IO模型 和 多线程问题
具体事件处理程序向反应器reactor订阅事件,反应器监测事件,发生后通知具体事件处理程序Redis 基于 Reactor 模式开发了自己的网络事件处理器 - 文件事件处理器(file event handler,后文简称为 FEH),而该处理器又是单线程的,所以redis设计为单线程模型。采用I/O多路复用同时监听多个socket,根据socket当前执行的事件来为 socket 选择对应的事件处理器。原创 2024-04-16 16:58:11 · 1205 阅读 · 0 评论 -
Redis的Stream 和 实现队列的方式【List、SortedSet、发布订阅、Stream、Java】
足够简单,消费消息延迟几乎为零,但是需要处理空闲连接的问题。如果线程一直阻塞在那里,Redis客户端的连接就成了闲置连接,闲置过久,服务器一般会主动断开连接,减少闲置资源占用,这个时候blpop和brpop或抛出异常,所以在编写客户端消费者的时候要小心,如果捕获到异常需要重试。其他缺点包括:做消费者确认ACK麻烦,不能保证消费者消费消息后是否成功处理的问题(宕机或处理异常等),通常需要维护一个Pending列表,保证消息处理确认;不能做广播模式,如pub/sub,消息发布/订阅模型;原创 2024-04-13 21:12:03 · 1067 阅读 · 0 评论 -
redis缓存 ★代码★ 实战【红锁问题(主从同步)、分布锁性能优化、缓存数据冷热分离、大量缓存重建、双写一致问题】
【代码】redis缓存 ★代码★ 实战【红锁问题(主从同步)、分布锁性能优化、缓存数据冷热分离、大量缓存重建、双写一致问题】原创 2024-04-11 10:39:18 · 233 阅读 · 0 评论 -
redis应用于公司项目实战中的分布式锁问题(减库存)【synchronized-setnx-过期时间解决死锁问题-设置锁标识解决锁误删问题-redisson解决锁续命问题】
对于一个减redis中缓存的库存数量的实战背景是分布式环境下。原创 2024-04-06 20:01:44 · 164 阅读 · 0 评论 -
Redis缓存设计与性能优化【缓存和数据库不一致问题,解决方案:1.加过期时间这样可以一段时间后自动刷新 2.分布式的读写锁】
以上我们针对的都是读多写少的情况加入缓存提高性能,如果写多读多的情况又不能容忍缓存数据不一致,那就没必要加缓存了,可以直接操作数据库。当然,如果数据库抗不住压力,还可以把缓存作为数据读写的主存储,异步将数据同步到数据库,数据库只是作为数据的备份。4、也可以用阿里开源的canal通过监听数据库的binlog日志及时的去修改缓存,但是引入了新的中间件,增加了系统的复杂度。1、对于并发几率很小的数据(如个人维度的订单数据、用户数据等),这种几乎不用考虑这个问题,很少会发生缓存不一致,,读读的时候相当于无锁。原创 2024-04-02 21:13:48 · 920 阅读 · 0 评论 -
Redis缓存设计与性能优化【并发创建同一个缓存,解决方案:互斥锁】
开发人员使用“缓存+过期时间”的策略既可以加速数据读写, 又保证数据的定期更新, 这种模式基本能够满足绝大部分需求。来解决,此方法只允许一个线程重建缓存, 其他线程等待重建缓存的线程执行完, 重新从缓存获取数据即可。重建缓存不能在短时间完成, 可能是一个复杂计算, 例如复杂的SQL、 多次IO、 多个依赖等。在缓存失效的瞬间, 有大量线程来重建缓存, 造成后端负载加大, 甚至可能会让应用崩溃。当前key是一个热点key(例如一个热门的娱乐新闻),并发量非常大。原创 2024-04-02 21:11:17 · 581 阅读 · 0 评论 -
Redis缓存设计与性能优化【缓存穿透、缓存击穿、缓存雪崩】
向布隆过滤器询问 key 是否存在时,跟 add 一样,也会把 hash 的几个位置都算出来,看看位数组中这几个位置是否都为 1,只要有一个位为 0,那么说明布隆过滤器中这个key 不存在。由于缓存层承载着大量请求, 有效地保护了存储层, 但是如果缓存层由于某些原因不能提供服务(比如超大并发过来,缓存层支撑不住,或者由于缓存设计不好,类似大量请求访问bigkey,导致缓存能支撑的并发急剧下降), 于是大量请求都会打到存储层, 存储层的调用量会暴增, 造成存储层也会级联宕机的情况。原创 2024-04-02 21:10:50 · 1574 阅读 · 0 评论 -
Redis分布式锁【synchronized不能用于分布锁,redis分布锁的死锁、加过期时间、锁误删、锁续命问题】【Redission源码分析】【redlock(主从同步问题)】【分段锁 提升性能】
但是,万一,真的出现了客户端1在拿到锁之后,还没走到释放锁的代码就宕机了,那完了,资源没办法被释放!很显然,目前这两步操作不是【原子性】的,Java代码嘛,肯定是一条一条按顺序执行的,就跟上面的例子一样,当我们出现极端情况,诶,这么说,上面这种方式在一个tomcat下,单进程的时候,是有效的,但是大伙忘了我们当前的环境,2个tomcat,分布式环境啊!其实时间设置过短,我想大家也能想得到会出现什么问题,可能业务没执行完就释放锁了,最后锁形同虚设,其他请求一样进来了,到时候又出现了跟最开始说的情景。原创 2024-03-31 16:36:54 · 567 阅读 · 0 评论 -
StringRedisTemplate与RedisTemplate详解【序列化的方式不同】
来进行对redis的各种操作,它支持所有的 redis 原生的 api。RedisTemplate中定义了对5种数据结构操作。spring 封装了。原创 2024-03-24 21:15:40 · 327 阅读 · 0 评论 -
【Redis主从架构。主从工作原理psync、bgsave、部分数据复制、主从复制风暴解决方案】【Redis哨兵高可用架构。sentinel】【redis管道和lua脚本】
缓存最近一段时间的数据,master和它所有的slave都维护了复制的数据下标offset和master的进程id,因此,当网络连接断开后,slave会请求master继续进行未完成的复制,从所记录的数据下标开始。如果master进程id变化了,或者从节点数据下标offset太旧,已经不在master的缓存队列里了,那么将会进行一次全量数据的复制。如果有很多从节点,为了缓解主从复制风暴(多个从节点同时复制主节点导致主节点压力过大),可以做如下架构,让部分从节点与从节点(与主节点同步)同步数据。原创 2024-03-24 21:06:38 · 569 阅读 · 0 评论 -
Redis持久化【RDB,bgsave的写时复制机制】【AOF,aof重写机制】【Redis混合持久化,以及对应改变aof重写规则】【Redis数据备份策略】
如果开启了混合持久化,AOF在重写时,不再是单纯将内存数据转换为RESP命令写入AOF文件,而是将重写这一刻之前的内存做RDB快照处理,并且将RDB快照内容和增量的AOF修改内存数据的命令存在一起,都写入新的AOF文件,新的文件一开始不叫appendonly.aof,等到重写完新的AOF文件才会进行改名,覆盖原有的AOF文件,完成新旧两个AOF文件的替换。从 1.1 版本开始,注意,如果执行带过期时间的set命令,aof文件里记录的是并不是执行的原始命令,而是记录key过期的时间戳。原创 2024-03-24 20:59:59 · 959 阅读 · 0 评论 -
【redis的高级命令:keys 支持通配符查询但是也是查全部】【redis的高级命令:scan cursor match count】【redis的高级命令:info】
全量遍历键,用来列出所有满足特定正则字符串规则的key,当redis数据量比较大时,性能比较差,要避免使用。原创 2024-03-23 10:54:38 · 224 阅读 · 0 评论 -
【redis单线程:键值对读写和单个网络IO处理、多线程:网络IO和持久化、异步删除、集群数据同步】【redis快的原因:内存、避免多线程切换】【redis处理多并发客户端:IO多路复用,事件分配器】
正因为 Redis 是单线程,所以要小心使用 Redis 指令,对于那些耗时的指令(比如keys),一定要谨慎使用,一不小心就可能会导致 Redis 卡顿。是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能,比如。等,其实是由额外的线程执行的。原创 2024-03-23 10:45:15 · 148 阅读 · 0 评论 -
Redis五种数据结构,以及所对应在大厂中的实战应用
原因是:大规模集群,用hash存储,只能部署在一个机器上,那么所有访问都访问在一个机器上,效率底。原创 2024-03-22 21:38:26 · 360 阅读 · 0 评论