相关文章

更多

最近更新

更多

Redis 数据库内部结构-Redis数据类型

2019-03-18 07:51|来源: 网路

Redis 数据库内部结构

Redis 中的每个数据库,都由一个redis.h/redisDb 结构表示:

typedef struct redisDb {

   int   id;   // 保存着数据库以整数表示的号码

   dict  *dict;  // 保存着所有键值对数据,这个属性也被称为键空间(key space

   dict  *expires;  // 保存着键的过期信息

   dict  *blocking_keys;  // 实现列表阻塞原语,在列表类型一章有详细的讨论

   dict  *watched_keys;// 用于实现WATCH 命令

 }redisDb;



因为 Redis 是一个键值对数据库( key-value pairs database ),所以它的数据库本身也是一个字典(俗称 key space)

      字典的键是一个字符串对象。

      字典的值则可以是包括字符串、列表、哈希表、集合或有序集在内的任意一种Redis类型对象。



在 redisDb  结构的 dict  属性中,保存着数据库的所有键值对数据。

下图展示了一个包含number 、book 、message 三个键的数据库—其中 number 键是一个列表,列表中包含三个整数值;book  键是一个哈希表,表中包含三个键值对;而 message  键则指向另一个字符串。



键值的语法约定

命令

   Redis中的命令不区分大小写,SET与set效果是一样的。

主键(key)

   可以用任何二进制序列作为key值,从形如“ foo”的简单字符串到一个JPEG文件的内容都可以。空字符串也是有效key值。


关于key的规则

      可以用任何二进制序列作为key值。

      格式约定:object-type:id:field。

      不用太长的键值。不仅消耗内存,而且在数据查找中计算成本很高。

      太短的键值通常也不是好主意,可读性差。

    如用“user:1000:password”来代替“u:1000:pwd”。


相关问答

更多

spring cache +redis与直接用redis有什么不同么?

集群环境下,每台服务器的spring cache是不同步的,这样会出问题的,spring cache只适合单机环境 redis是设置单独的缓存服务器,所有集群服务器统一访问redis,不会出现缓存不同步的情况 spring cache是很早就有的东西,现在+redis是为了顺应时代,更好的兼容集群环境,加强保留spring cache功能,不如直接使用redis

redis怎么使用

应用Redis实现数据的读写,同时利用队列处理器定时将数据写入mysql。 同时要注意避免冲突,在redis启动时去mysql读取所有表键值存入redis中,往redis写数据时,对redis主键自增并进行读取,若mysql更新失败,则需要及时清除缓存及同步redis主键。 这样处理,主要是实时读写redis,而mysql数据则通过队列异步处理,缓解mysql压力,不过这种方法应用场景主要基于高并发,而且redis的高可用集群架构相对更复杂,一般不是很推荐。

Redis有哪些数据类型

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

springboot整合redis为什么数据存不进redis,实现不了缓存

检查Redis配置是否正确,包括连接地址、密码、端口是否修改之类

redis怎么使用

应用Redis实现数据的读写,同时利用队列处理器定时将数据写入mysql。 同时要注意避免冲突,在redis启动时去mysql读取所有表键值存入redis中,往redis写数据时,对redis主键自增并进行读取,若mysql更新失败,则需要及时清除缓存及同步redis主键。 这样处理,主要是实时读写redis,而mysql数据则通过队列异步处理,缓解mysql压力,不过这种方法应用场景主要基于高并发,而且redis的高可用集群架构相对更复杂,一般不是很推荐。

Redis:redis不是内存数据库么?为什么我把redis-server.exe关了重新启动值还有呢?

清空数据库:打开redis-client.exe,输入命令flushdb redis自带持久化,因此是不会因为掉电而丢失所有内容的。默认情况下,redis每隔一定时间间隔会对数据库做一次内存快照,记录数据库此刻的内容;启动服务器时会自动加载内存快照。 你可以打开edis文件夹里.rdb文件看看。

redis是怎么存储数据的

是人为存进去的。 先从redis取,如果没有则从数据库取,然后会回写到redis中,这样下次可以继续从redis区

Redis vs MemoryCache(Redis vs MemoryCache)

MemoryCache被嵌入进程中,因此只能用作该进程的普通键值存储。 MemoryCache的单独服务器对应的将被memcached 。 尽管redis是一种可以在其他服务器上托管的数据结构服务器,可以像memcached一样通过网络进行交互,但redis支持一系列复杂的数据类型和操作,以提供逻辑和智能缓存。 MemoryCache is embedded in the process , hence can only be used as a plain key-value store fro ...

Redis作为数据库(Redis as a database)

您可以通过多种不同的方式使用Redis作为权威性商店: 打开AOF (仅追加文件存储) 请参阅AOF文档 。 这将保留对您的数据集实时执行的所有Redis命令的日志。 使用Master-Slave复制运行Redis, 请参阅复制文档 。 这将允许您提供高可用性,如果您的一个实例失败。 如果您运行在像EC2这样的东西上,您可以EBS返回您的Redis分区,以提供另一层防范实例故障。 Redis集群 - 在这里,这是专门设计为运行Redis的一种方式,可以帮助HA和可扩展性。 但是,至少还有六个月左右 ...

redis键是否应该在不同的数据类型中是唯一的?(Should redis key be unique across different datatypes?)

是 - 键名必须是唯一的,因为每个键可以存储一个且只有一个基本数据结构 - 字符串,哈希,列表,集或排序集(位图类型的位图和HLL是字符串)。 Yes - it is necessary that key names be unique as each key can store one and only one basic data structure - String, Hash, List, Set or a Sorted Set (the underlying type of Bitmap ...