Redis数据类型和底层实现

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

/usr/bin/redis-cli #进入redis

1.string(一个 key 对应一个 value)

string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象,string 类型的值最大能存储 512MB。

**string:**底层数据结构为动态字符串,类似Java的ArrayList,在append会超额分配内存,减少后续内存的频繁分配。

set cent "bingxi"
get cent 
del cent

点击并拖拽以移动

2.hash( 是一个键值(key=>value)对映射表) 特别适合用户存储对象

hash:底层数据结构有两种:(ziplist压缩链表,hashtable哈希),当fielde-value长度较短个数较少时,使用ziplist,否则使用hashtable。每个 hash 可以存储 232 - 1 键值对(40多亿)。

hmset cent field1 "bingxi" field2 "sun" field3 "moon"
hgetall cent
hmget cent field1 
hmget cent field2
del cent

点击并拖拽以移动

3.list(字符串列表,按照插入顺序排序,可以添加一个元素到列表的头部(左边)或者尾部(右边))

**List:**在列表元素较少的情况下会使用一块连续的内存存储(ziplist,压缩列表),将多个ziplist链起来组成链表,本质还是双向链表,头部尾部数据插入性能较高,中间性能较差。元素较多时使用quicklist(redis3.2之前使用linkedlist双向列表)

lpush cent redis 
lpush cent mongodb
lpush cent mysql

lrange cent 1 4


1) "mysql"
2) "mongodb"
3) "redis"

点击并拖拽以移动

4.set 是 string 类型的无序不重复集合。

**set:**是string类型的无序集合,底层是整数数组,所有添加,查找,删除的时间复杂度为O(1)。

sadd 命令:

添加一个 string 元素到 key 对应的 set 集合中,成功返回 1,如果元素已经在集合中返回 0。

mysql 添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。

集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。

sadd cent redis
sadd cent mongodb
sadd cent mysql
sadd cent mysql #集合内元素的唯一性,第二次插入的元素将被忽略
#查看所有
smembers cent 

#集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。

点击并拖拽以移动

5.zset(sorted set:有序不重复集合)

**Zset:**有序不重复,但是每个元素都会关联一个double类型的score分数,以分数作为排序,元素不重复,score可以重复。底层结构:hashMap或跳跃表。

#zadd key score member 
zadd cent 0 mysql 
zadd cent 0 mongodb
zadd cent 0 postgersql

#查看所有元素
zrangebyscore 0 100

点击并拖拽以移动


Redis数据类型和底层实现
https://centyuan.github.io/2023/11/06/数据库/Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。/
作者
hlyuan
发布于
2023年11月6日
许可协议