谈谈Redis

抱着下面这两个问题,我开始读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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值