zoukankan      html  css  js  c++  java
  • redis若干问

    一. redis 为什么要采用单进程单线程?

    对于redis来说,单线程效率更高。
    redis是基于内存的操作,内存是快设备,不需要像I/O操作那样,等待I/O就绪,用单线程操作,避免了线程上下文的切换,效率更高。

    二. Redis单线程的优劣势 ?
    (1)  代码更清晰,处理逻辑更简单 。省去了锁和上下文切换的开销。
    (2) 无法发挥多核CPU性能,开启多个Redis实例可以改进。为了减少切换的开销,有必要为每个实例指定其所运行的CPU内核。

    三. 什么场景下用多线程?

    假设有任务A和任务B,如下两种执行方式
    方式一:  两个线程,一个线程执行A,另一个线程执行B。
    方式二:  一个线程,先执行A,执行完以后继续执行B。
    请问,哪种方式执行更快?
    对于快设备来说单线程更快,对于慢设备来说多线程更快。

    在I/O(磁盘或网络)操作都时候,要用多线程。I/O操作:1. I/O等待(等待机械寻址成功,等待消息送达) 2. I/O操作。
    在"I/O等待"时间段内,线程是在“阻塞”着等待磁盘,此时操作系统可以将那个空闲的CPU核心用于服务其他线程。
    Redis不涉及I/O操作,因此设计为单线程是效率最高的。

    四. redis 性能瓶颈在哪?
    1.内存大小,关系到Redis存储的数据量
    2. 网络带宽,吞吐量。
    Redis客户端执行一条命令分为四个过程:发送命令、命令排队、命令执行、返回结果
    而其中发送命令+返回结果这一过程被称为Round Trip Time(RTT,往返时间)
    Redis的客户端和服务端可能部署在不同的机器上。例如客户端在北京,Redis服务端在上海,两地直线距离约为1300公里,那么1次RTT时间=1300×2/(300000×2/3)=13毫秒(光在真空中传输速度为每秒30万公里,这里假设光纤为光速的2/3),那么客户端在1秒内大约只能执行80次左右的命令,这就和Redis的高并发高吞吐特性背道而驰啦!所以一般情况下,都是就近部署!

    五. 使用redis需要注意的问题?
    1. key命名的规范性。
    2. 数据一致性问题。
    3. 缓存穿透,击穿,雪崩问题。
    4. key的并发竞争问题。
    5. 过期key的回收。

    六. redis 过期策略和内存淘汰机制。
    过期策略:定期删除(定时间段删除过期的key)+惰性删除(使用时,删除过期的key),大量过期的优化--(内存满时,触发定期删除)
    内存淘汰机制: redis内存块耗尽了,怎么办?
    volatile-lru(默认):在设置了过期时间的键空间中,优先移除最近未使用的key。(可能未过期,只是最近最久未使用)
    allkeys-lru:在主键空间中,优先移除最近未使用的key。

  • 相关阅读:
    从零开始搭建口袋妖怪管理系统(4)-借助webpack4.6工程化项目(上)
    JavaSE——装饰设计模式+简单加密解密工程
    MyEclipse和Eclipse区别与联系
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/shijianchuzhenzhi/p/13122200.html
Copyright © 2011-2022 走看看