第八章 Redis数据库结构与读写原理
2016-02-22 11:38
330 查看
注:本文主要参考自《Redis设计与实现》
1、数据库结构
每一个redis服务器内部的数据结构都是一个redisDb[],该数组的大小可以在redis.conf中配置("database 16",默认为16),而我们所有的缓存操作(set/hset/get等)都是在redisDb[]中的一个redisDb(库)上进行操作,这个redisDb默认是redisDb[0]。
注意:
可以通过"select 1"来选择接下来的操作在redisDb[1]上进行操作
在实际使用中,我们只在redisDb[0]上操作,因为
redis没有获取当前是在哪一个redisDb上操作的函数,所以很容易才select多次之后,我们就不知道在哪一个库上了,而且既然是只在redisDb[0]上进行操作,那么"database"就可以设置为1了,
该参数设置为1后,不仅可以将原有的其他redisDb所占的内存给了redisDb[0],在的"定期删除"策略中,我们也只扫描一个redisDb就可以了。
"定期删除"见 第九章 Redis过期策略
2、读写原理
在每一个redisDb中都以一个dict(字典)用于存储"key-value"。
例子:
假设在redis中执行了如下四条命令并且没有执行任何的select,即默认选择在redisDb[0]上操作
set msg "hello nana"
rpush mylist "a" "b" "c"
hset book name "lover"
hset book author "nana"
则存储结构如下:
3、读写时所进行的维护工作
在读取一个key(读写操作都需要读取key)后,
服务器更新缓存命中次数与不命中次数
更新该key的最后一次使用时间
检测该key是否过期(详细见 第九章 Redis过期策略)
写计数器+1,用于持久化
1、数据库结构
每一个redis服务器内部的数据结构都是一个redisDb[],该数组的大小可以在redis.conf中配置("database 16",默认为16),而我们所有的缓存操作(set/hset/get等)都是在redisDb[]中的一个redisDb(库)上进行操作,这个redisDb默认是redisDb[0]。
注意:
可以通过"select 1"来选择接下来的操作在redisDb[1]上进行操作
在实际使用中,我们只在redisDb[0]上操作,因为
redis没有获取当前是在哪一个redisDb上操作的函数,所以很容易才select多次之后,我们就不知道在哪一个库上了,而且既然是只在redisDb[0]上进行操作,那么"database"就可以设置为1了,
该参数设置为1后,不仅可以将原有的其他redisDb所占的内存给了redisDb[0],在的"定期删除"策略中,我们也只扫描一个redisDb就可以了。
"定期删除"见 第九章 Redis过期策略
2、读写原理
在每一个redisDb中都以一个dict(字典)用于存储"key-value"。
例子:
假设在redis中执行了如下四条命令并且没有执行任何的select,即默认选择在redisDb[0]上操作
set msg "hello nana"
rpush mylist "a" "b" "c"
hset book name "lover"
hset book author "nana"
则存储结构如下:
3、读写时所进行的维护工作
在读取一个key(读写操作都需要读取key)后,
服务器更新缓存命中次数与不命中次数
更新该key的最后一次使用时间
检测该key是否过期(详细见 第九章 Redis过期策略)
写计数器+1,用于持久化
相关文章推荐
- 第九章 Redis过期策略
- redis安装部署
- Redis实现简单消息队列
- Redis 初
- 面试题之redis实现限制1小时内每用户Id最多只能登录5次
- 阿里云、青云、腾讯云服务器,Mysql数据库,Redis等产品性能对比
- .Net下Redis使用注意事项
- 3. redis的超时,事务,watch
- redis 学习
- golang--Redis最佳的Go语言驱动
- redis--使用redis-rdb-tools分析redis的内存使用情况
- 在java中使用redis
- Redis替代文件存储session
- C++自制Redis 数据库(十二) 初级存储引擎已经测试完毕
- Redis消息队列发布微博
- spring aop自定义redis缓存实现
- Redis源码解析:07压缩列表
- 2. redis的数据类型
- redis密码设置、访问权限控制等安全设置
- 1. redis简介