redis理论学习:数据结构

啥是redis

redis是一个基于内存的k-v数据库,支持多种数据结构,经常用于缓存和分布式锁,将数据存储在内存里实现高速读写

同时又主从复制,事务,持久化和lua脚本等功能,适用于高并发场景

主要用redis就是作为mysql和服务层中间的缓存层,让数据可以更高效地读取返回,同时也能防止mysql在高请求量下被打坏

redis常用的数据结构有哪些

  1. string字符串
    1. 三种编码方式,int,embstr,raw。数字就用int编码,字符串长度小于44就用embstr编码,大于就用raw编码
    2. 底层是一个叫SDS的结构,包含free,len和buf
    3. 因为有len,所以可以O1直接返回长度;因为有free,所以可以预留不用新分配内存
    4. 因为不再以\0为长度结尾,所以二进制安全
  2. list队列
    1. 双端操作对象,可以先入先出,可以后入先出,头尾都可以操作
    2. 底层之前是ziplist和linkedlist
    3. 之后改为quicklist和listpack
  3. set集合
    1. set底层实现有整数集合和字典,前者有序后者无序,但是使用都当无序来
    2. 整数集合编码节约内存,字典编码查找更快
  4. zset有序集合
    1. ziplist或者skiplist+字典编码
  5. hash哈希表
    1. ziplist和hashtable是底层实现,ziplist适用于元素少,单个元素长度较小的情况,其他用hashtable
    2. hashtable的扩容和go的map类似,都是渐进式扩容,翻倍扩容

redis执行

  1. redis本身是单线程的,因为redis本身基于内存已经够快,而且引入多线程需要考虑线程安全很麻烦;6.0版本针对网络IO引入了多线程,但整体还是单线程
  2. 普通机器每秒十几万的读性能,几万的写性能
  3. redis为啥那么快?
    1. 内存操作,本身就快
    2. 数据结构高效
    3. 单线程减少了切换开销
    4. IO多路复用,epoll(操作系统内容)

redis理论学习:数据结构
http://example.com/2024/04/24/redis理论学习:数据结构/
作者
WoodQ
发布于
2024年4月24日
许可协议