redis高性能

本文是作者学习Redis的笔记,主要探讨了Redis的高性能特点,如基于内存操作、单线程设计和IO多路复用机制。Redis采用单线程避免了线程上下文切换和锁竞争,通过哈希表和跳表实现高效数据访问。同时,文章介绍了Redis如何处理哈希冲突、渐进式rehash策略以及压缩表和跳表等数据结构。此外,还讨论了IO多路复用的基本概念,如epoll,以及回调机制和select/poll/epoll的区别。
摘要由CSDN通过智能技术生成

本文主要是笔者学习redis的笔记, 为了更好的学习和理解, 主要分为高性能、高可靠以及高扩展三大板块来学习, 如下图:
在这里插入图片描述
高可用、高性能以及高扩展对于任何一个大型系统的设计来说都是必不可少的, 笔者希望自己不仅仅是学习redis基本原理, 更要通过对优秀的中间件思考, 能逐步沉淀自己设计大型系统架构的能力. 废话不多说了, 直接上菜,接下来为大家分享redis高性能.

任何系统设计都会有一些取舍, redis也不例外, 本文主要从redis的高性能中一些取舍做了一些小结, 采用的形式为QA方式, 具体如下:

高性能

Q: redis的高性能体现在哪些方面?

A:

  1. 基于内存读写. Redis 的大部分操作在内存上完成,再加上它采用了高效的数据结构,例如哈希表和跳表,这是它实现高性能的一个重要原因。
  2. 采用单线程, 避免线程线程上线文切换引起资源消耗, 以及相比多线程而言, 单线程不需要对共享资源进行加锁处理, 避免多线程对共享资源竞争导致性能消耗;
  3. 采用非阻塞IO多路复用机制, 提交网络吞吐量;

Q: redis采用单线程的优缺点是什么?

A: 首先, 需要厘清一个事实, redis单线程, 主要是指redis的网络IO和键值对读写是由单个线程完成的, 这也是redis对外提供键值存储服务的主要流程. 但是redis的其他功能, 比如持久化、异步删除、集群数据同步等是由额外的线程执行的. 其次: redis真正影响性能的并不是get/set操作, 而是网络IO, 因此redis采用了IO多路复用机制.

单线程优缺点

优点:

  • redis 基于内存操作, 并且采用了hash表和跳表等数据结构, 操作速度非常快;
  • 避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;
  • redis采用IO非阻塞的IO, 增加网络的吞吐量;

缺点:
主要包括两方面

  1. 任意一个请求在server中一旦发生耗时,都会影响整个server的性能,也就是说后面的请求都要等前面这个耗时请求处理完成,自己才能被处理到。耗时的操作包括以下几种:
  • 操作bigKey: 写入一个bigkey在分配内存时需要消耗更多的时间,同样,删除bigkey释放内存同样会产生耗时;
  • 大量key集中过期 : Redis的过期机制也是在主线程中执行的,大量key集中过期会导致处理一个请求
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值