美文网首页
8、Redis问题汇总

8、Redis问题汇总

作者: yannhuang | 来源:发表于2017-06-01 19:32 被阅读50次

1、Redis为什么是单进程的

我觉得最重要的一点是,redis作为一个内存数据库,内存操作是很快的。网络IO是瓶颈,如果用多线程,还要引起线程切换,线程切换的开销是很大的,切换线程之后要保留现场,要做很多预处理。所以用单线程反而能起到更好的作用。

线程切换为什么开销大呢?举个简单的例子,我在看一篇文章,有个单词不认识,那我要去查词典。在查词典之前,我得要先记录我阅读到了那一页的哪一行,方便下次来继续读。那这样肯定是要影响我读书效率的。
我总结几点redis为什么要设计成单线程的原因

  1. 都是通过网络来调用redis的,如果是内网调用情况稍微比外网调用好点。但是这些和内存操作的时间不是一个量级的。用单线程处理完全能应付。
  2. redis是采用单线程-多路复用IO模型来实现高性能内存数据服务的。这样就避免了适用锁。网络层利用IO多路复用,这使用了内核级别的线程池,就是说还是存在并发的,只是在网络层的并发。但是网络IO本身是很慢的。是瓶颈。那么你在业务处理阶段设计再多的线程,使用再多的cpu内核,也没法逾越网络Io的瓶颈。
  3. redis和传统的多线程服务器不同。比如tomcat这些,后端往往存在很重的IO操作,会产生长时间的等待。所以采用多线程是有必要的。

redis用单线程也不是没有问题。有一个很明显的问题就是。当进行一些复杂的集合操作的时候会使redis并发性下降。

解决办法是:你可以在一个多核的机器上部署多个redis实例。组成master-master,master-slave的形式,实现读写分离。耗时的读命令完全可以放到slave中。


单进程单线程好处

  1. 代码更清晰,处理逻辑更简单
  2. 不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗
  3. 不存在多进程或者多线程导致的切换而消耗CPU

单进程单线程弊端

  1. 无法发挥多核CPU性能,不过可以通过在单机开多个Redis实例来完善;

2、Redis的过期键删除策略

有三种不同的键删除策略:

  1. 定时删除
    设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时立即执行删除操作。
  2. 惰性删除
    每次从键空间获取键时,检查其是否过期,过期则删除;否则就返回该键。
  3. 定期删除
    每隔一段时间,对数据库进行一次检查,删除所有的过期键。

Redis服务器使用的是 惰性删除定期删除 两种策略。

相关文章

  • 8、Redis问题汇总

    1、Redis为什么是单进程的 我觉得最重要的一点是,redis作为一个内存数据库,内存操作是很快的。网络IO是瓶...

  • Redis问题汇总

    1、启动警告 CentOS 7下安装的Redis,按照默认配置启动总是提示: 执行以下语句: 并在/etc/rc....

  • Redis问题汇总

    为什么要使用Redis ? 速度快 ,走内存, 不用去查硬盘,内存速度比硬盘快很多 。可以利用分布式线程安全的特性...

  • ROC-AUC 曲线以及PRC曲线

    目录:机器学习常见面试问题汇总问题汇总(1):逻辑回归问题汇总(2):支持向量机问题汇总(3):树模型问题汇总(4...

  • redis汇总

    redis优化 redis 操作相关 安装Redis redis常用命令

  • Redis汇总

    1. redis 数据类型 string, list, hash ,set,zset 2. redis 单线程模型...

  • Xcode8 问题汇总

    Xcode8正式版遇到的一下问题和找到的解决办法 1. command+/ 快速注释无法使用 在终端输入 sudo...

  • 问题汇总(5):神经网络

    这篇应当也是很重要的把~ 目录:机器学习常见面试问题汇总问题汇总(1):逻辑回归问题汇总(2):支持向量机问题汇总...

  • 石油化工转动设备常见问题汇总与分析

    转动设备施工常见问题汇总与分析 结合本人海外8年项目转动设备施工经验特对施工常见问题进行如下的汇总和浅析: 1.基...

  • iOS10 Xcode8问题汇总

    iOS10 Xcode8问题汇总 http://blog.csdn.net/zhengyanfeng1989/ar...

网友评论

      本文标题:8、Redis问题汇总

      本文链接:https://www.haomeiwen.com/subject/cxwhxxtx.html