01 redis数据结构

vvEcho 2024-01-20 14:08:37
Categories: Tags:

redis是一种基于键值对的来存储数据的nosql数据库

其中对应的value支持string,list,set,zset,bitmaps,hyperloglog,GEO地理信息数据

常用的有String,list,set,zset,hash

使用场景

string 用来缓存存储一些简单的数据,比如用户名,密码,token,session等;
hash键值对存储,hset user:1 name zhangsan age 18 gender male
list 存储一些需要按照顺序存储的数据,比如消息队列,日志,缓存等;
set 存储一些需要去重且无序的数据,比如用户访问过的页面,用户访问过的商品等(抽奖系统:SADD 添加参与者,SPOP 随机抽取中奖者;标签/好友关系:存储用户标签,通过 SINTER 查找共同关注;去重统计:记录用户点赞、签到等唯一行为);
sort set 元素关联分数,按分数排序;如游戏积分,排行榜

底层数据结构

hash底层的数据结构是ziplist或hashtable,键值对个数超过512 会由ziplist转换为hashtable

set底层的数据结构是intset或hashtable,元素为整数且键值对个数小于512为intset,若超过或不符合则转换为hashtable

zset底层数据结构为压缩列表ziplist或skiplist+dict(跳表+字典),元素数量小于128且元素长度小于64;超过此阈值则转换为跳表+字典

list的底层数据结构为压缩列表ziplist或快速列表quicklist,元素数量小于512且元素长度小于64用ziplist;超过此阈值则转换为quicklist,由多个ziplist节点组成的双向链表,可以平衡内存与性能