redis面试题:redis存在线程安全问题吗?

redis面试题:redis存在线程安全问题吗?
这个问题可以从两个方面来回答:
从redis服务端层面,redis server本身是线程安全的key-value数据库,在redis server端执行指令的时候不需要任何的同步机制,它不会存在任何的线程安全的问题。

虽然redis6.0里面增加了多线程模型。但是增加的多线程模型只是用来处理网络的IO事件。对于指令的执行过程仍然是采用主线程来处理,所以说它不存在多个线程同时去执行操作指令的情况。为什么redis里面没有采用多线程来执行指令,有几方面的原因。

1.redis本身可能出现的瓶颈点无非就是网络IO,CPU,内存。但是CPU不是Redis的瓶颈点,所以没有必要使用多线程来执行指令。如果采用多线程,意味着对于redis的所有指令操作,都必须要考虑线程安全问题,也就是说需要加锁来解决,这种方式带来的性能影响反而更大。
2.从redis的客户端的层面来说。redis server中的指令操作是原子的,但是有多个 Redis客户端同时执行多个指令的情况下就无法保证原子性。假设两个redis client同时去获取redis server上的key值,同时去进行修改和写入,因为多线程环境下的原子性无法被保障,以及多进程的情况下,共享资源访问的一个竞争问题,使得数据的安全性无法得到保障。当然对于客户端层面,线程安全性问题解决的方案有很多。比如,尽可能的使用redis里面的原子指令或者对于多个客户端的资源访问去加锁,也可以通过Lua脚本实现多个指令的操作,从而去满足它的原子性。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值