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:有序集合)。/