谈谈Redis

本文探讨了Redis为何在单线程模式下仍能保持高性能,并讨论了Redis与Memcache的集群实现差异。Redis的作者选择不使用多线程,而是通过事件循环和IO多路复用来处理并发。文章还介绍了Redis的Sentinel和集群方案,以及Redis的数据结构和内存管理策略。Redis不使用Libevent等外部库,以保持代码简洁并易于控制。
摘要由CSDN通过智能技术生成

抱着下面这两个问题,我开始读Redis:
1、Redis是单线程的,为什么它的性能不逊于多线程的Memcache?
2、Redis2.8版本不支持集群,而Memcache支持,为什么Redis不借鉴Memcache的方式?

一段对话:

【高级】张文 6:52:56
狗哥,在一台四核的机器上,是不是应该跑四个redis的实例
【高级】张文 6:53:19
来充分利用multi-core
【顶级】小笨狗 7:00:25
不建议
【顶级】小笨狗 7:00:59
redis没有针对多核做优化
【顶级】小笨狗 7:01:30
如果你为每个实例绑定cpu可能还会好点
【顶级】小笨狗 7:02:00
否则没有证明说跑多实例有助于多核利用
【顶级】小笨狗 7:02:21
虽然很多人在多核里跑多实例
【顶级】小笨狗 7:02:54
我认为把鸡蛋放一个篮子里很危险
【高级】张文 7:02:54
可以通过配置为每个实例指定CPU吧
【顶级】小笨狗 7:03:04
可以的
【顶级】小笨狗 7:03:13
绑定cpu
【顶级】小笨狗 7:03:45
为了这一点做多实例我宁愿浪费点cpu
【高级】张文 7:04:52
redis的性能瓶颈在网络而不是cpu
【高级】张文 7:04:58
可以这样理解吗
【顶级】小笨狗 7:05:28
只能说redis不是cpu密集型
【顶级】小笨狗 7:06:05
当你连接多的时候redis一样会飙cpu
【高级】张文 7:07:22
是因为复杂数据结构的操作
【高级】张文 7:10:39
但redis也不是IO密集型吧,虽然redis通过事件循环、IO多路复用来处理并发,但redis由于是单线程的,所以一般会避免阻塞IO
【高级】张文 7:10:57
狗哥,如果我的表述有问题,还请指出啊
【顶级】小笨狗 7:11:57
redis的作者模仿libevent写了一套 所以你无需关心io
【高级】张文 7:14:49

【高级】张文 7:20:15
狗哥,我始终觉得redis这种单线程的方式相当于事务里的序列化隔离级别,所以可以进行优化:1,锁分离,如果两个文件事件所处理的数据没有冲突,则可以并行;2读写锁,将读锁和写锁分离,做读读并行
【高级】张文 7:20:20
基于多线程
【高级】张文 7:20:33
不知道可行不
【顶级】小笨狗 7:22:16
这个看你业务
【顶级】小笨狗 7:22:53
单线程不是锁
【高级】张文 7:26:16
恩,单线程不是锁,redis里的单线程是通过将所有产生事件的套接字都放到一个队列里面
【高级】张文 7:26:25
有序的处理
【高级】张文 7:27:02
上一个事件被处理完之后,才会处理下一个
【顶级】小笨狗 7:27:30
但你的业务却不是这样的
【顶级】小笨狗 7:27:44
这是redis保证自己的数据处理
【高级】张文 7:32:00
那redis试用的业务场景是
【高级】张文) 7:32:08
适用
【初级】hektor 7:32:47
有序事件那都是redis自带的原子操作方法 并不能保证一个客户端的事务能串行

另外,多线程虽然可以利用多核,提高并行度,但多线程意味着更复杂的代码、上下文切换、同步阻塞等

第二个问题
  Memcache被称为分布式缓存服务器,但服务端并没有提供分布式功能,其分布式主要体现在客户端,对于Server端,仅仅是部署多个Memcache Se

Redis的雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求达到数据库,给数据库带来巨大压力。为了避免缓存雪崩,可以采取一些策略,比如使用布隆过滤器来判断缓存中是否存在key,对于不存在的key可以设置一个null值进行隔离,同时设置随机的过期时间来避免大量key同时失效。 对于Redis的雪崩问题,还有一种情况是由于恶意攻击造成的缓存穿透。比如黑客发出的恶意攻击请求,在缓存中找不到对应的key,每次都直接查询数据库,给数据库带来巨大的负载。为了解决这个问题,可以采用限流策略来保护数据库免受恶意攻击的影响。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Redis缓存雪崩及解决办法](https://blog.csdn.net/wasdgiaogiao__/article/details/130894988)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [009 谈谈Redis的雪崩、穿透和击穿,以及出现这些情况后的应对方案](https://blog.csdn.net/qq_32649581/article/details/124026423)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值