【赵渝强老师】Redis的存储结构

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Redis 默认配置包含 16 个数据库,通过 `databases` 参数设置。每个数据库编号从 0 开始,默认连接 0 号数据库,可通过 `SELECT <dbid>` 切换。Redis 的核心存储结构包括 `dict`、`expires` 等字段,用于处理键值和过期行为。添加键时需指定数据库信息。视频讲解和代码示例详见内容。

b046.png

Redis内部默认存在16个数据库,这是通过在redis.conf文件中的参数databases决定的。

# Set the number of databases. The default database is DB 0, you can select
# a different one on a per-connection basis using SELECT<dbid> where
# dbid is a number between 0 and 'databases'-1
databases 16

   

每个Redis数据库都会有一个编号,该编号从0开始计算。当使用Redis客户端连接Redis服务器时,默认将连接到0号数据库中。可以通过使用select语句进数据库的切换。

   

视频讲解如下:

   

例如:

127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> select 7
OK
127.0.0.1:6379[7]> select 15
OK
**127.0.0.1:6379[15]> select 18**
**(error) ERR DB index is out of range 18**
127.0.0.1:6379[15]> select 0
OK
127.0.0.1:6379>

 

Redis的存储结构如下图所示。


   

RedisDB的设计结构如下所示:

typedef struct redisDb {
  dict *dict;                   
  dict *expires;                
  dict *blocking_keys;          
  dict *ready_keys;             
  dict *watched_keys;           
  int id;                       
  long long avg_ttl;            
  unsigned long expires_cursor; 
  list *defrag_later;           
} redisDb;

   

其中:

  • dict为核心存储。
  • expires用来处理键的过期行为。
  • blocking_keys使用较少。
  • ready_keys与blocking_keys搭配使用。当下次执行push时,Redis会检查blocking_keys当中是否存在对应的key,再采取相对应的操作。
  • watched_keys负责实现watch功能,但watch对redis性能影响极大,线上环境禁止使用。    


因此在向Redis数据库中添加Key时,需要指定对应的数据库信息,如下源码所示。

/* Add the key to the DB. It's up to the caller 
* to increment the reference
* counter of the value if needed.
* The program is aborted if the key already exists. */
void dbAdd(redisDb *db, robj *key, robj *val) {
  sds copy = sdsdup(key->ptr);
  int retval = dictAdd(db->dict, copy, val);
  serverAssertWithInfo(NULL,key,retval == DICT_OK);
  signalKeyAsReady(db, key, val->type);
  if (server.cluster_enabled) slotToKeyAdd(key->ptr);
}




目录
打赏
0
0
0
0
183
分享
相关文章
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
203 1
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
Redis分片集群中数据是怎么存储和读取的 ?
Redis集群采用的算法是哈希槽分区算法。Redis集群中有16384个哈希槽(槽的范围是 0 -16383,哈希槽),将不同的哈希槽分布在不同的Redis节点上面进行管理,也就是说每个Redis节点只负责一部分的哈希槽。在对数据进行操作的时候,集群会对使用CRC16算法对key进行计算并对16384取模(slot = CRC16(key)%16383),得到的结果就是 Key-Value 所放入的槽,通过这个值,去找到对应的槽所对应的Redis节点,然后直接到这个对应的节点上进行存取操作
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
119 6
【赵渝强老师】监控Redis
Redis 实例的监控是运维管理中的关键内容,主要包括内存、吞吐量、运行时信息和延时的监控。 1. **监控内存**:使用 `info memory` 可查看 Redis 内存使用情况,包括已用内存、峰值内存等。 2. **监控吞吐量**:通过 `info stats` 获取每秒处理命令数(OPS)、网络输入输出流量等。 3. **监控运行时信息**:利用 `info` 命令结合 `grep` 过滤出客户端连接数、拒绝连接数等重要信息。 4. **监控延时**:可以通过客户端手动监控或服务器内部延迟监控来检测延时问题。
Redis哈希结构在提升数据检索速度中的实践应用
本文详细介绍了 Redis 哈希结构的特点、常见使用场景以及如何在实际应用中利用哈希结构提升数据检索速度。通过合理使用 Redis 哈希结构,可以显著提高系统的性能和响应速度。在实际开发中,结合具体业务需求,灵活运用 Redis 提供的多种数据结构,构建高效的缓存和数据存储解决方案。希望本文能帮助您更好地理解和应用 Redis 哈希结构,提升数据检索速度。
94 18
【赵渝强老师】Redis的慢查询日志
Redis慢查询日志用于记录执行时间超过预设阈值的命令,帮助开发和运维人员定位性能问题。每条慢查询日志包含标识ID、发生时间戳、命令耗时及详细信息。配置参数包括`slowlog-max-len`(默认128)和`slowlog-log-slower-than`(默认10000微秒)。实战中可通过`slowlog get`获取日志、`slowlog len`查看长度、`slowlog reset`重置日志。建议线上环境将`slowlog-max-len`设为1000以上,并根据并发量调整`slowlog-log-slower-than`。需要注意的是,慢查询只记录命令执行时间。
236 5
Redis Stream:实时数据流的处理与存储
通过上述分析和具体操作示例,您可以更好地理解和应用 Redis Stream,满足各种实时数据处理需求。
259 14
【赵渝强老师】基于Redis的旁路缓存架构
本文介绍了引入缓存后的系统架构,通过缓存可以提升访问性能、降低网络拥堵、减轻服务负载和增强可扩展性。文中提供了相关图片和视频讲解,并讨论了数据库读写分离、分库分表等方法来减轻数据库压力。同时,文章也指出了缓存可能带来的复杂度增加、成本提高和数据一致性问题。
148 4
【赵渝强老师】基于Redis的旁路缓存架构
|
5月前
|
Redis分片集群中数据是怎么存储和读取的 ?
Redis集群采用哈希槽分区算法,共有16384个哈希槽,每个槽分配到不同的Redis节点上。数据操作时,通过CRC16算法对key计算并取模,确定其所属的槽和对应的节点,从而实现高效的数据存取。
121 13

相关产品

  • 云数据库 Tair(兼容 Redis)
  • 下一篇
    oss创建bucket
    AI助理

    你好,我是AI助理

    可以解答问题、推荐解决方案等