文档章节

Redis数据库笔记(一)

FEINIK
 FEINIK
发布于 2017/02/15 21:28
字数 1164
阅读 62
收藏 4

一、对象

1. Redis数据库中的每个键值对的键和值都是一个对象

2. Redis共有字符串(string),哈希(hash),列表(list),集合(set),有序集合(zset)五种类型的对象,每种类型的对象都至少包含两种或以上的编码方式,不同的编码方式可以在不同的使用场景上优化对象的使用效率。

3. 内存回收:

    因为C语言并不支持内存的自动回收功能, 所以Redis在自己的对象系统中构建了一个引用计数技术实现的内存回收机制,通过这一机制,   程序可以通过跟踪对象的引用计数信息,在适当的时候自动释放对象并进行内存回收。

4. 对象共享:

    对象共享可以很大程度上节约内存,Redis只对包含整数值(0~9999)的字符串对象进行共享。

    如果键A创建了一个包含整数值100的字符串对象,键B也创建了一个整数值100的字符串对象,那么在Redis中键A与键B将共享同一个整数值100的字符串对象,如下图:

二、Redis过期键删除策略

如果一个键过期了,那么一般会有以下几种不同的删除策略:

1. 定时删除:在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间到达时,立即执行键的删除操作。

2. 惰性删除:只有在获取键的时候,才检查键是否过期,如果过期就删除,否则返回该键。

3. 定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。

以上三种删除策略某种程度上都存在一定的问题,定时删除可以最大程度的释放内存,但是如果过期键比较多的时候,在删除的时候会占用相当一部分的CPU时间,会造成服务器在响应时间与吞吐量会下降。惰性删除对CPU时间来说是友好的,但如果相当一部分键长时间未被访问,那么就会存在内存泄漏的问题。定期删除的难点是需要制定一个合理的执行时长与执行频率。

那其实Redis服务器实际使用的惰性删除与定期删除策略的结合,通过这两种策略的结合可以很好的合理使用CPU时间与和避免内存浪费之间取得平衡。

三、数据库

1. Redis数据库是由dict和expires两个字典组成,其中dict字典负责保存键值对,而expires字典负责保存键的过期时间。

2. 当主服务器删除一个过期键时,它会向所有从服务器发送一条DEL命令来显示的删除过期键。

3. 从服务器即使发现过期键也不会主动删除它,而是等待主节点发来DEL命令,这种删除策略保证了主从服务器数据的一致性。

四、数据持久化

1. RDB持久化:

RDB持久化既可以手动执行,也可以根据服务器配置选项定期执行,该功能可以将某个时间点的数据库状态保存到RDB文件中,避免数据意外丢失。

RDB文件的创建可以通过SAVE与BGSAVE两个命令来生成,SAVE命令会阻塞Redis服务器进程,在SAVE命令执行期间,客户端发送的任何请求都会被服务器拒绝。而BGSAVE命令则不会阻塞,因为BGSAVE命令的保存工作是由子进程来完成的,在 执行BGSAVE命令的时候客户端的SAVE, BGSAVE, BGREWRITEAOF命令都会被阻塞。

RDB文件载入,服务器在载入RDB文件时会一直处于阻塞状态,直到载入完成。

自动间隔性保存配置:

save 900 1

save 300 10

save 60 10000

只要满足以上任何一个条件BGSAVE就会被执行。

2. AOF持久化

与RDB持久化通过保存数据库中的键值对来记录数据库状态不同的是,AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的。

© 著作权归作者所有

共有 人打赏支持
FEINIK
粉丝 224
博文 57
码字总数 53142
作品 0
广州
后端工程师
加载中

评论(1)

零域1
零域1
条理清晰,很容易看懂,涵盖的也比较全面,:+1:
redis学习笔记(三)之其他命令和特性

redis学习笔记(一)之安装测试 redis学习笔记(二)之数据类型 一、基本特性 1、reids 默认端口:6379; 2、默认支持16个数据库,建立连接后自动选择0号数据库,建议不同的应用使用不同的r...

憨豆公子
2016/08/19
21
0
【Redis笔记-11】Redis开启远程访问

概要 操作 首先,运行Redis数据库 查询数据库状态 可以看到他们的ip是和127.0.0.1绑定的,也就是说只能本机访问了。 修改 配置文件 找到 , 改成 保存并重启Redis服务。 再次查看Redis数据库...

xidiancoder
2017/11/09
0
0
redis学习笔记---redis主从复制

一、介绍 redis的复制功能是支持多个数据库之间的数据同步。一类是主数据库(master)一类是从数据库(slave),主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从数据库,而...

ivan-Zhao
2015/12/14
159
1
Redis学习笔记一:NoSql及Redis介绍

一.NoSQL介绍 NoSQL(Not Only SQL),意为反SQL运动,是一项合新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。它指的是非关系型的数据库。随着互联网web2.0网站的兴起,...

孟飞阳
2016/07/04
82
0
Redis学习笔记二:Linux/Unix环境下安装与部署redis

一、Redis的安装与部署 Redis的官方下载站是:http://redis.io/download 步骤一:下载安装包 wget http://redis.goolecode.com/files/redis-2.4.17.tar.gz 步骤二:编译源程序 步骤三:移动文...

孟飞阳
2016/07/04
60
0

没有更多内容

加载失败,请刷新页面

加载更多

javascript source map 的使用

之前发现VS.NET会为压缩的js文添加一个与文件名同名的.map文件,一直没有搞懂他是用来做什么的,直接删除掉运行时浏览器又会报错,后来google了一直才真正搞懂了这个小小的map文件背后的巨大...

粒子数反转
昨天
0
0
谈谈如何学Linux和它在如今社会的影响

昨天,还在农耕脑力社会,今天已经人工智能技术、大数据、信息技术的科技社会了,高速开展并迅速浸透到当今科技社会的各个方面,Linux日益成为人们信息时代的到来,更加考验我们对信息的处理程...

linux-tao
昨天
0
0
学习设计模式——中介者模式

1. 认识中介者模式 1. 定义:用一个中介对象来封装一系列的对象交互行为,中介者使得各对象不需要显式的互相引用,从而使其松散耦合,独立的改变他们之间的交互。 2. 结构: Mediator:中介者...

江左煤郎
昨天
0
0
深入理解Plasma(1):Plasma 框架

这一系列文章将围绕以太坊的二层扩容框架,介绍其基本运行原理,具体操作细节,安全性讨论以及未来研究方向等。本篇文章作为开篇,主要目的是理解 Plasma 框架。 Plasma 作为以太坊的二层扩容...

HiBlock
昨天
0
0
Java 8 日期 示例

Java 8 推出了全新的日期时间API。Java处理日期、日历和时间的方式一直为社区所诟病,将 java.util.Date设定为可变类型,以及SimpleDateFormat的非线程安全使其应用非常受限。Java也意识到需...

阿刚ABC
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部