《Redis设计与实现》学习笔记

Redis

本文会有一些Redis和Java容器对象的对比,一个是分布式数据库,一个是JVM内部数据容器,应用场景不同,仅仅是为了加深对Redis”数据库“的认识,加深对Redis使用场景的认识。

1.什么是Redis

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication)LUA脚本(Lua scripting), LRU驱动事件(LRU eviction)事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)

redis中文官方网站

2. Redis数据类型有哪些?

 提供给用户的数据类型 有String,List,Hash,Set,ZSet

  Redis内部数据结构有:SDS(简单动态字符串),链表,字典,跳跃表,整数集合,压缩列表

那么数据类型和内部数据结构的对应关系是什么样子的呢?

2.1 Redis数据类型与内部数据结构的关系是什么样的?

Redis没有直接使用基础数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这些对象是供用户直接使用的。Redis数据库中的每个键值对的键和值都是一个对象,五种类型的对象至少都支持两种或者两种以上的基础数据结构,不同的数据结构可以在不同的使用场景上优化对象的使用效率。

String是唯一一个会被其它四种对象嵌套使用的对象。List、Hash、Set、ZSet之所以会虚线指向SDS也是嵌套使用String的原因。

3.什么是SDS?

3.1 SDS数据结构是什么样的?

Redis 3.0及以前:

Redis没有直接使用C语言字符串,而是自己创建了一个名为简单动态字符串(Simple Dynamic String)的抽象类型来表示字符串。

SDS的基本结构:

struct sdshdr{
    int len;
    int free;
    char buf[];
}

Redis 3.0及以后: Redis 的SDS分为了5种数据结构,分别是sdshdr5,sdshdr8,sdshdr16,sdshdr32,sdshdr64。以为sdsshdr8举例:

struct sdshdr8 {

    // 当前字符串长度,最长支持2^8-1=255个字符(不包括\0)
    uint8_t len;
 
    // 记录了当前字节数组总共分配的内存大小(不包括\0)
    uin
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值