iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Redis学习笔记(七) 数据库
  • 974
分享到

Redis学习笔记(七) 数据库

Redis学习笔记(七)数据库 2019-03-15 03:03:54 974人浏览 才女
摘要

Redis 服务器将所有的数据库都保存在服务器状态redisServer结构的db数组中,db数组的每个项都是一个redisDB: struct redisServer{ //一个数组保存着服务器中的所有数据库 redi

Redis学习笔记(七) 数据库

Redis 服务器将所有的数据库都保存在服务器状态redisServer结构的db数组中,db数组的每个项都是一个redisDB:

struct redisServer{
  //一个数组保存着服务器中的所有数据库
  redisDb *db;
  //数据库的个数
  int dbnum;
}

dbnum:服务器初始化时,程序根据dbnum 来决定应创建多少少数据库,由服务器配置的database选项决定,默认16.

在服务器内部,客户端状态redisClient结构的db属性记录了客户端当前目标数据库,这个属性指向redisDb结构的指针:

typedef struct redisClient{
  //记录客户端当前正在使用的数据库
  redisDb *db;
} redisClient;

redisClient指针指向redisServer 数组的其中一个元素,而被指向的元素就是客户端的目标数据库。

 

 

 

 

redisBd结构的dict地点保存了数据库中的所有键值对,我们将这个字典称为键空间。

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

键空间的值也是数据库的值,每个值可以是字符串对象、列表对象、哈希表对象、集合对象和有序集合对象中的任意一种Redis对象。

 

Redis命令对数据库进行读写时,服务器不仅对键执行指定的读写操作,还会执行一些额外的维护工作:

读取一个键后,服务器会根据键是否存在来更新服务器键空间命中次数或键空间不命中次数。

读取一个键之后,服务器会更新键的LRU(最后一次使用时间),这个值用于计算键的空闲时间。

如果服务器在读取一个键时发现该键已经过期,那么服务器会先删除这个过期键,然后再执行余下的操作。

如果客户端使用Watch命令监视某个键,那么服务器再对被监视的键进行修改后,会将这个键标记为脏,从而让事务程序注意到这个键已经被修改过。

服务器每次修改一个键之后,都会对脏键计数器的值加一,这个计数器会触发服务器的持久化以及赋值操作。

如果服务器开启了数据库通知功能,那么在对键进行修改后,服务器将按配置发送相应的数据库通知。

 

设置过期时间

命令 EXPIRE key ttl 设置键生存时间为ttl秒

命令 PEXPIRE  key ttl 设置键生存时间为ttl毫秒

命令EXPIREAT key timestamp 命令 设置键key过期时间为timestamp秒数时间戳

命令 PEXPIREAT key timestamp 设置键key过期时间为timestamp所指定的毫秒时间戳

EXPIRE命令可以转换为 PEXPIRE命令

def EXPIRE(key,ttl_in_sec);
ttl_in_ms = sec_to_ms(ttl_in_sec)
PEXPIRE(key,ttl_in_ms)

PEXPIRE命令转换为PEXPIREAT命令

def PEXPIRE(key,ttl_in_ms)
now_ms = get_current_unix_timestamp_in_ms();
PEXPIREAT(key,now_ms+ttl_in_ms)

EXPIREAT命令转换为PEXPIREAT命令

def EXPIREAT(key,expire_time_in_asc)
expire_time_in_ms = sec_to_ms(expire_time_in_sec)
PEXPIREAT(key,expire_time_in_ms)

redisDB 结构的expires字典保存了数据库所在键的过期时间(过期字典),

过期字典的键是一个指针指向键空间的某个键对象。

过期字典的值是一个long类型的整数(毫秒精度的UNIX时间戳)。

 

过期删除策略

定时删除,在设置过期时间的同时,创建定时器,到期立即删除(内存友好,CPU不友好)。

惰性删除,下一次查询时,查询是否过期,过期删除,(内存不友好,CPU友好)。

定期删除,每隔一段时间执行一次。

Redis的删除策略使用了 惰性删除和定期删除两种。

 

在执行SAVE或者BGSAVE命令生成RDB文件时,程序会对数据库中的键进行检查,已过期的键不会被保存到新创建的RDB文件中,因此数据库包含过期键不会对新生成的RDB文件造成影响。

 

在载入RDB文件时,如果服务器以主服务器模式运行,载入RDB文件时会对键进行检查,未过期的键加载到数据库中,过期键忽略。从服务器模式运行时,文件中保存的所有键被加载,主从同步时,从服务器过期键被清空。

 

AOF文件写入时,如果过期键未清理,AOF文件不会因为过期键而产生影响,过期键被删除后,程序会向AOF文件追加DEL命令,来显示的记录该键已被删除。

 

AOF重写时,程序会对数据库中的键检查,已过期的键不会被保存到重写后的AOF文件中。

 

服务器在复制模式下,服务器的过期键由主服务器控制:主服务器在删除过期键后会向从服务器发送一条DEL命令,从服务在未收到命令前,客户端的读命令会像对未过期键处理方式一样,直到接到DEL命令,从过期键才会删除。

 


每天学一点,总会有收获。

 

说明:尊重作者知识产权,文中内容参考《Redis设计与实现》,仅在此做学习与大家分享。

 

您可能感兴趣的文档:

--结束END--

本文标题: Redis学习笔记(七) 数据库

本文链接: https://www.lsjlt.com/news/6097.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python学习笔记(三)—数据库篇
    一、数据库编程 数据库编程是指在应用程序中使用数据库管理系统(DBMS)进行数据存储、检索和处理的过程。数据库提供了一种结构化的方式来组织和存储数据,使得数据的管理更加高效和可靠。 1.1 关系数据库...
    99+
    2023-09-18
    python 学习 笔记
  • Python学习笔记整理(七)Pytho
    一、元组介绍 元组(tuple)是无法修改的其他对象的结合.元组由简单的对象构成,元组与列表类似,不过元组不能在原处修改。通常写成圆括号中的一系列项。 1、元组的属性 *任意对象的有序集合 与字符串和...
    99+
    2023-01-31
    学习笔记 Python Pytho
  • 学习笔记-小甲鱼Python3学习第十七
    优秀的东西永远是经典的,经典的东西永远是简单的,不是说复杂不好,而是能够把复杂的东西简单化,堪称经典。为了使代码程序实现更为简单,我们把代码分为越来越小的组成部分。分三大部分实现:函数、对象、模块python中定义函数使用关键字def>...
    99+
    2023-01-31
    甲鱼 学习笔记
  • 学习笔记-小甲鱼Python3学习第七讲
    打飞机框架加载背景音乐播放背景音乐(设置单曲循环)我方飞机产生interval = 0while True:    if 用户是否电击关闭游戏窗口按钮:        退出游戏    interval += 1    if interval...
    99+
    2023-01-31
    甲鱼 学习笔记 第七讲
  • [Python学习笔记]Python数据
    嵩天老师的课感觉很好呀,啦啦啦 0. 数据分析之前奏 课程主要内容: 常用IDE: 本课程主要使用:Anaconda Anaconda:一个集合,包括conda、某版本Python、一批第三方库等   -支持近800个第三方库...
    99+
    2023-01-30
    学习笔记 数据 Python
  • python 学习笔记 3 -- 数据
    当你创建一个对象并给它赋一个变量的时候,这个变量仅仅 引用 那个对象,而不是表示这个对象本身!也就是说,变量名指向你计算机中存储那个对象的内存。这被称作名称到对象的绑定。eg. # -*- coding: utf-8 -*-  shopli...
    99+
    2023-01-31
    学习笔记 数据 python
  • [Python学习笔记] turtle库
    turtle库常用函数 引入turtle模块 import turtle turtle的绘图窗体 #setup()设置窗口大小及位置#setup()可省略turtle.setup(width,height,startx,st...
    99+
    2023-01-31
    学习笔记 Python turtle
  • PHP学习笔记:数据库连接与操作
    概述:在Web开发中,数据库连接和操作是非常重要的环节。PHP作为一种广泛应用于Web开发的脚本语言,提供了丰富的数据库连接和操作功能。本文将介绍PHP中如何连接数据库以及常用的数据库操作方法,同时会提供具体的代码示例,以便读者更好地理解和...
    99+
    2023-10-21
    PHP 数据库操作 数据库连接
  • Python学习笔记一(Python数据
    Python数据类型主要包括数字,字符串,列表,元组和字典。字符串,列表,元组和字典都是序列,序列最主要两个特点是索引操作和切片操作,索引操作让我们从序列中抓取一个特定项目,切片操作让我们能够获取序列的一个切片,即一部分序列。1.数字 ...
    99+
    2023-01-31
    学习笔记 数据 Python
  • Python学习笔记整理(十七)异常处理
    一、异常基础 try/except:捕捉由代码中的异常并恢复,匹配except里面的错误,并自行except中定义的代码,后继续执行程序(发生异常后,由except捕捉到异常后,不会中断程序,继续执行try语句后面的程序) ...
    99+
    2023-01-31
    学习笔记 异常 Python
  • 学习笔记-TP5框架学习笔记\(路由\)
    TP5框架简单理解 (PS:只做粗略、关键知识的记录,TP程序的开始。详情请阅读官方手册) 1. 架构总览 TP程序的开始 PHP >=5.3.0, PHP7 ThinkPHP5.0应用基于MVC(模型-视图-控制器)的方...
    99+
    2023-10-25
    学习 php 开发语言
  • PHP学习笔记:数据库优化与索引设计
    在开发Web应用程序时,数据库操作是一个非常关键的环节。数据库的性能直接影响着Web应用程序的响应速度和用户体验。为了提升数据库的效率和查询速度,我们需要进行数据库优化和索引设计。一、数据库优化数据库架构优化:正规化设计:遵循数据库范式,减...
    99+
    2023-10-21
    PHP 数据库优化 索引设计
  • python学习笔记 函数
    一等函数 在python中,函数是一等对象。编程语言理论家把“一等对象”定义为满足以下条件的程序实体: 在运行时创建 能赋值给变量或数据结构中的元素 能作为参数传给函数 能作为函数的返回结果 在python中,整数、字符串和字典都是一...
    99+
    2023-01-31
    函数 学习笔记 python
  • GoLang协程库libtask学习笔记
    目录协程解决了什么问题简介对协程的抽象如何保存上下文信息协程的调度总结协程解决了什么问题 我们先从一次网络IO请求过程中的read操作为例,请求数据会先拷贝到系统内核空间中,再从操作...
    99+
    2022-12-17
    GoLang协程库libtask GoLang libtask
  • H3CNE学习笔记
      H3CNE五日“游” ——之第一天 废话少说 直接进入真题!!!!(哈哈 ) H3CNE   H3C认证初级网络工程师 第    一   节 路由器、交换机及其操作系统介绍 路由器 1、 路由器的作用 连接具有不同介质的链路 连接网络或...
    99+
    2023-01-31
    学习笔记 H3CNE
  • Python学习笔记
    Python介绍 Python是一种解释型、面向对象的语言。 官网:www.python.org Python环境 解释器:www.python.org/downloads 运行方式: 交互模式。在IDLE中运行。 脚本模式。文件的后缀...
    99+
    2023-01-30
    学习笔记 Python
  • python_os_sys学习笔记
    sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sy...
    99+
    2023-01-31
    学习笔记 python_os_sys
  • tornado学习笔记
    一.UIMOTHODS: 1.在项目目录创建uimothods.py文件(名称可以任意)内容: def test2(self): return ('hello uimothods')2.tornado项目文件中导入并注册: #导入f...
    99+
    2023-01-30
    学习笔记 tornado
  • Python 学习笔记
    rs=Person.objects.all() all返回的是QuerySet对象,程序并没有真的在数据库中执行SQL语句查询数据,但支持迭代,使用for循环可以获取数据。 print rs.query 会打印出原生sql语句 rs=Pe...
    99+
    2023-01-31
    学习笔记 Python
  • 学习笔记(3)
    1.* 匹配零个或多个字符(通配符中)2.ls 的-d选项不仅仅可以显示指定目录的信息,还可以用来表示不递归子文件夹。  # ls -dl /etc 显示/etc目录的信息  # ls -d /etc 只显示/etc下面的文件夹3.显示/v...
    99+
    2023-01-31
    学习笔记
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作