redis服务器将所有数据库都保存在redis/redisServer中,数组db存放所有数据库,每一项是一个redisdb结构。dbnum代表数据库数量。

客户端有一个指针指向当前数据库,可以切换,也就是移动指针。

键空间

现在稍微介绍一下redisdb结构,它的字典保存了所有键值对

键空间的键也就是数据库的键, 每个键都是一个字符串对象。

键空间的值也就是数据库的值, 每个值可以是字符串对象、列表对象、哈希表对象、集合对象、有序集合对象

所有数据库的操作,添加一个键值对, 删除一个键值对, 获取某个键值对, 等等,都是通过对键空间字典进行操作来实现的。

维护

读写键空间的时候,服务器会执行一些额外操作,比如:

  • 读一个键后(读操作写操作都要对键读取), 会根据键是否存在, 更新键空间命中(hit)次数或不命中(miss)次数。
  • 读取一个键后, 服务器会更新键的 LRU (最后一次使用)时间, 这个值可以用于计算键的闲置时间。
  • 如果服务器在读一个键时, 该键已经过期, 服务器会删除这个键, 然后执行其他操作。
  • 如果客户使用 WATCH 监视某个键,在对这个键进行修改之后, 会将这个键记为脏(dirty),让事务程序知到这个键被修改
  • 服务器每次修改一个键之后, 都会对脏(dirty)键计数器的值增一, 这个计数器会触发服务器的持久化以及复制操作执行
  • 如果服务器开启了数据库通知功能, 那么在对键进行修改之后, 服务器将按配置发送相应的数据库通知。

时间

用户可以给某个键设置生存时间,过期时间是一个UNIX时间戳,到时间自动删除这个键。

redisdb结构的expires字典保存了所有的键的过期时间,我们称这个字典为过期字典。

三种过期键删除策略

1)定时删除:创建一个定时器,到时间立即执行删除操作(对内存友好,因为能保证过期了立马删除,但是对cpu不友好)

2)惰性删除:键过期不管,每次获取键时检查是否过期,过期就删除(对cpu友好,但是只有在使用的时候才可能删除,对内存不友好)

3)定期删除:隔一段时间检查一次(具体算法决定检查多少删多少,需要合理设置)

淘汰策略

当Redis占用内存超出最大限制 (maxmemory) 时,可采用如下策略 (maxmemory-policy) ,让Redis淘汰一些数据,以腾出空间继续提供读写服务 :

noeviction: 对可能导致增大内存的命令返回错误 (大多数写命令,DEL除外) ;

volatile-ttl: 在设置了过期时间的key中,选择剩余寿命 (TTL) 最短的key,将其淘汰;

volatile-lru: 在设置了过期时间的key中,选择最少使用的key (RU) ,将其淘汰;

volatile-random: 在设置了过期时间的key中,随机选择一些key,将其淘汰;

allkeys-1Lru: 在所有的key中,选择最少使用的key (LRU) ,将其淘汰;

allkeys-random: 在所有的key中,随机选择一些key,将其淘汰;

redis——数据库相关推荐

  1. redis mysql查询数据类型_linux 常见的标识与Redis数据库详解

    xxx@xxx:~$ : 第一个 xxx 只的是 用户名 第二个 xxx 代表的是 HOST主机 ~ : 当前用户的根, 根的位置在 /home/用户名 $ : 代表当前用户是一个普通用户 # : 代 ...

  2. Redis数据库设置密码

    Redis数据库的默认打开方式为无密码打开,现在要将其设置为以密码形式打开. Redis文件夹内容 1.修改配置文件 在redis.windows.conf文件中设置密码的命令中添加requirepa ...

  3. 彻底取代Redis+数据库架构,京东618稳了!

    作者介绍 京东零售在线存储部,致力于分布式系统.开源数据库技术的研究,主要负责数据库性能调优.监控和架构设计. 过去十年,随着移动互联网指数级的增长,企业和用户对应用程序的响应性能要求越来越高, 如何 ...

  4. Ubuntu16.04下安装Redis数据库

    技术交流QQ群:1027579432,欢迎你的加入! 1.安装redis数据库 安装命令:sudo apt-get install redis-server 2.检查redis服务器系统进程 cdl@ ...

  5. redis数据库和python的交互

    转载地址:https://blog.csdn.net/skyannesky/article/details/78068049 一.引入redis模块 import redis 二.在python中获取 ...

  6. 超强、超详细Redis数据库入门教程

    这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么 2.redis的作者何许人也 3.谁在使用r ...

  7. redis 数据库主从不一致问题解决方案

    redis 数据库主从不一致问题解决方案 参考文章: (1)redis 数据库主从不一致问题解决方案 (2)https://www.cnblogs.com/wadhf/p/11865681.html ...

  8. (Windows Maven项目)Redis数据库的安装和操作实现

    Redis是一个内存数据库,他会把你写入其中的数据缓存到内存中,之后会周期性的往磁盘中写入,这篇文章中介绍的是在Windows环境下利用Maven工具编译运行Java文件实现Redis数据库的操作. ...

  9. Redis数据库教程——系统详解学习Redis全过程

    Redis数据库教程--系统详解学习Redis全过程 Redis快速入门:Key-Value存储系统简介 Key-Value存储系统:     Key-Value Store是当下比较流行的话题,尤其 ...

  10. Redis数据库的应用场景介绍

    https://www.jb51.net/article/68262.htm 一.MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载 ...

最新文章

  1. eye--创建单位矩阵
  2. node 微信授权 获取openid
  3. C++ WINDOWS API 如何使用NMAKE和CL编译
  4. linux 查询注册服务,window下注册服务的命令小结
  5. PHP 编写和使用web服务 第一节
  6. 玩转 SpringBoot 2 快速整合 Listener
  7. Nutanix推出云基础架构远程管理IT解决方案
  8. python---用python实现插入排序
  9. foobar2000 正式登陆 iOS/Android
  10. Linux du命令和df命令
  11. STM32单片机定时器
  12. Windows/Linux下C++对于UUID的跨平台封装
  13. lisp不是函授型语言_LISP语言
  14. 复习——哈夫曼树及哈夫曼编码
  15. 虚拟机安装mysql数据库
  16. C 语言到底能做什么?What can C do?
  17. 传感器的使用,高仿微信摇一摇,动画加声音
  18. 高考录取系统的模拟(1)——成绩的模拟生成程序
  19. 零基础C语言入门001——编译器下载
  20. IGES格式文件举例

热门文章

  1. mysql8.0本机登录要1秒_Mysql8.0的登录大坑……(忘记登录密码也可以这么搞)
  2. logback日志pattern_@Slf4j 实现日志输入到外部文件
  3. 矩阵运算——平移,旋转,缩放
  4. muduo for v210
  5. max file descriptors_年轻族的战场!宋MAX强势对比嘉际
  6. python钻石数据分析_数据分析该用什么工具?
  7. LSGO软件技术团队2015~2016学年第十六周(1214~1220)总结
  8. tfs 未能在以下位置创建报表文件夹 /TfsReports: 授予的权限不足,无法执行此操作
  9. TFS(Team Foundation Server)敏捷使用教程
  10. 数据结构中“图”的相关概念理解