美文网首页
2.1 Redis数据类型以及持久化

2.1 Redis数据类型以及持久化

作者: MelodyOf流沙 | 来源:发表于2021-03-15 18:42 被阅读0次

数据类型

  • String 字符串类型,值最大可存储512MB(底层采用SDS实现)
struct sdshdr{
     //记录buf数组中已使用字节的数量
     //等于 SDS 保存字符串的长度
     int len;
     //记录 buf 数组中未使用字节的数量
     int free;
     //字节数组,用于保存字符串
     char buf[];
}
  • Hash 对应key field value,常用于存储对象信息。对于v值较小的情况下,hash底层结构由ziplist数据结构支撑,v值较大的情况下,使用dict字典结构进行支撑。
typedf struct dict{
    dictType *type;//类型特定函数,包括一些自定义函数,这些函数使得key和
                   //value能够存储
    void *private;//私有数据
    dictht ht[2];//两张hash表 
    int rehashidx;//rehash索引,字典没有进行rehash时,此值为-1
    unsigned long iterators; //正在迭代的迭代器数量
}dict;
  • List 可以保存重复元素,使用场景可用于朋友圈等。底层实现结构有:ziplist,quicklist, linkedList


    redis-list底层结构.png
  • Set 集合,所有元素保持唯一性,无序,可用于求交集,并集等,场景可用在粉丝,共同关注等。底层数据结构是,当数据量不大,且value都为整数时,使用intset进行存储;其他情况使用dict进行存储.

typedef struct intset {
 
    // 编码方式
    uint32_t encoding;
 
    // 集合包含的元素数量
    uint32_t length;
 
    // 保存元素的数组
    int8_t contents[];
 
} intset;
  • ZSet 有序集合,和set的区别是,集合中每个元素都会对应一个double的分数,这个分数的作用是为了进行排序.场景用在排行榜。底层数据结构是,当数据较小时(元素个数小于128个,元素总大小小于64字节时)使用ziplist,其他情况使用skiplist(跳表).


    skiplist数据结构.png
  • Bitmap/Geo
skiplist和红黑树和avl之间对比
  • 红黑树插入删除效率远远高于avl,红黑树只需要最多旋转3次即可完成插入删除。而avl为了平衡树,旋转次数可能远远大于3次。而对于查询而言,红黑树可能比avl会多一层高,因此查询速度不如avl,但基本可以忽略不计。所以大部分的程序实现都采用了红黑树而非avl,比如linux的进程管理,epool的文件管理等实现。
  • 跳表和红黑树之间做对比,跳表由于叶子节点都前后连接,所以支持范围查询;跳表实现比红黑树实现简单;跳表的插入删除和查询效率和红黑树之间区别不大,都可计算为O(logn)


    image.png

持久化

RDB

全量备份,备份数据非语句。bgsave会新开一个进程进行备份生成rdb文件。系统可配置自动备份时间,并提供压缩文件。

  • RDB 方式数据没办法做到实时持久化/秒级持久化,也就造成会有部分时间的数据丢失
  • 如果数据量太大,fork子进程时可能会阻塞系统。
AOF

与RDB存储某个时刻的快照不同,AOF持久化方式会记录客户端对服务器的每一次写操作命令到日志当中,并将这些写操作以 Redis协议追加保存到以后缀为aof文件末尾

  • 相同数据量下,AOF的文件通常体积会比RDB大。因为AOF是存指令的,而RDB是所有指令的结果快照。但AOF在日志重写后会压缩一些空间。
  • 在大量写入和载入的时候,AOF的效率会比RDB低。因为大量写入,AOF会执行更多的保存命令,载入的时候也需要大量的重执行命令来得到最后的结果。 RDB对此更有优势。

Nosql对比

  • Memcached 单个key存储小
  • Mongodb 支持索引,数据量存储大
  • Redis 并发高,原子操作,支持持久化,自带集群,单线程

相关文章

  • 2.1 Redis数据类型以及持久化

    数据类型 String 字符串类型,值最大可存储512MB(底层采用SDS实现) Hash 对应key field...

  • Redis面试题

    Redis支持的数据类型? String、List、Set、Hash、zSet 什么是Redis持久化?Redis...

  • 2020-06-08 Redis只配做缓存?是你还不懂它!

    1.Redis支持的数据类型?2.什么是Redis持久化?Redis有哪几种持久化方式?优缺点是什么?3.Redi...

  • redis学习要点

    1.Redis支持的数据类型? 2.什么是Redis持久化?Redis有哪几种持久化方式?优缺点是什么? 3.Re...

  • NoSQL二--Redis

    目录 一、Redis介绍二、安装Redis三、Redis 持久化四、Redis 的数据类型五、Redis常用操作六...

  • redis数据持久化

    redis数据持久化以及supervisor管理redis supervisor管理redis yum -y in...

  • 聊聊Redis

    本篇文章从以下几个方面介绍一下Redis。 1、Redis数据类型 2、Redis持久化 3、Redis集群 4、...

  • redis常见问题

    1.Redis支持的数据类型?字符串、hash、list、set、zset2.什么是Redis持久化?Redis有...

  • Redis

    什么是Redis Redis的五种数据类型 常见Redis问题 淘汰策略 持久化 主从复制,哨兵模式https:/...

  • 记录Redis学习

    1.Redis的数据类型 2.Redis的持久化 3.Redis事务 4.Redis发布订阅 5.Redis主从复制

网友评论

      本文标题:2.1 Redis数据类型以及持久化

      本文链接:https://www.haomeiwen.com/subject/yftkcltx.html