ZhangZhihui's Blog  

 

  • 存储模式:基于内存实现,而非磁盘
  • 数据结构:基于不同业务场景的高效数据结构
    • 动态字符串(REDIS_STRING):整数(REDIS_ENCODING_INT)、字符串(REDIS_ENCODING_RAW)
    • 双端列表(REDIS_ENCODING_LINKEDLIST)
    • 压缩列表(REDIS_ENCODING_ZIPLIST)
    • 跳跃表(REDIS_ENCODING_SKIPLIST)
    • 哈希表(REDIS_HASH)
    • 整数集合(REDIS_ENCODING_INTSET)
  • 线程模型: Redis 的网络 IO 以及键值对指令读写是由单个线程来执行的,避免了不必要的contextswitch和竞选
  • I/O 模型: 基于I/O多路复用模型,非阻塞的I/O模型
  • 恰单的数据编码: 根据实际数据类型,选择合理的数据编码

 

Redis 的单线程主要是指Redis的网络IO和键值对读写是由一个线程来完成的,Redis在处理客户端的请求时包括获取 (socket 读)、解析、执行、内容返回 (socket 写) 等都由一个顺序串行的主线程处理,这就是所谓的“单线程”。这也是Redis对外提供键值存储服务的主要流程。但Redis的其他功能, 比如持久化、异步删除、集群数据同步等等,其实是由额外的线程执行的。 可以这么说,Redis工作线程是单线程的。但是,整个Redis来说,是多线程的。 

 

Copied from: https://www.cnblogs.com/wzh2010/p/15886787.html

 

开启多线程的方式

Redis6.0的多线程默认是禁用的,只使用主线程。如需开启需要修改redis.conf配置文件:

# io-threads-do-reads no
io-threads-do-reads yes

开启多线程后,还需要设置线程数,否则是不生效的。同样修改redis.conf配置文件。
关于线程数的设置,官方有一个建议:4 核的机器建议设置为 2 或 3 个线程,8核的建议设置为 6 个线程,线程数一定要小于机器核数。
线程数并不是越大越好,官方认为超过了 8 个就很难继续提效了,没什么意义。

# 假设你的CPU核数是8核,尽量配置成 5~6
io-threads 5

 

Copied from: https://www.cnblogs.com/wzh2010/p/15886804.html

posted on 2024-01-14 11:43  ZhangZhihuiAAA  阅读(18)  评论(0)    收藏  举报