0
点赞
收藏
分享

微信扫一扫

大模型在应用开发安全左移实践

夏侯居坤叶叔尘 2024-08-22 阅读 20

是一个基于内存的、可持久化的键值对(key-value型)存储系统,数据读写是内存中的。

是单线程吗?为什么还这么快?

是也不是,Redis单线程指的是 接受客户端请求->解析请求->进行数据读写操作->发送数据给客户端 这个过程是由一个线程来完成,这是我们常说Redis是单线程的原因,关闭文件、AOF刷盘、释放内存又有各自的线程,这是说Redis多线程的原因。

单线程Redis吞吐量可以达到10W/每秒,Redis 采用单线程(网络 I/O 和执行命令)那么快,有如下几个原因:

  • Redis的数据读写是在内存中完成,所有的数据都存储在内存中。内存的读写速度远快于磁盘,这极大地提升了数据的访问速度。
  • Redis内部使用了多种高效的数据结构,如String、list、hash、set、zset,支持快速的查找、插入和删除操作。
  • 采用单线程可以避免多线程之间的竞争,省去了多线程切换带来的时间和性能上的、锁竞争的开销,不会导致死锁问题。
  • Redis采用I/O多路复用机制处理大量客户端的Socket请求,一个线程处理多个I/O流。Redis只运行单线程的情况下,内核会一直监听这些socket上的连接请求和数据请求,一旦请求到达,就会交给Redis线程处理,就实现了一个Redis线程处理多个IO流的效果。

数据结构

Redis提供了丰富的数据类型,常见的有五种

String(字符串)

Hash(哈希)

List(列表)

Set(集合)

ZSet(有序集合)

分布式锁,互斥锁

缓存击穿

如果缓存中的某个热点数据过期(被频繁访问的的数据,例如秒杀活动)了,此时大量的请求访问该热点数据就无法从缓存中读取,直接访问数据库,数据库很容易就被高并发的请求冲垮,这就是缓存击穿问题。

解决方案:

不给热点数据设置过期时间,由后台异步更新缓存,或者在热点数据准备要过期前 提前通知后台线程更新缓存以及重新设置过期时间。

分布式锁,保证同一时间只有一个业务线程请求缓存,未能获取分布式锁的,等待锁释放后读取缓存。

举报

相关推荐

0 条评论