码迷,mamicode.com
首页 > 数据库 > 详细

第八章 Redis数据库结构与读写原理

时间:2016-02-22 13:42:34      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

注:本文主要参考自《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,用于持久化

第八章 Redis数据库结构与读写原理

标签:

原文地址:http://www.cnblogs.com/java-zhao/p/5205765.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!