文档章节

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
粉丝 220
博文 57
码字总数 53142
作品 0
广州
后端工程师
加载中

评论(1)

qb11
qb11
条理清晰,很容易看懂,涵盖的也比较全面,:+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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Memcached启动参数详解

memcached -d -m 1024 -l 192.168.100.101 -p 11211 -P /tmp/memcached.pid -c 1024 -f 1.25 -n 80 -t 16 运行参数描述 -d:以守护(daemon)进程方式启动; -u:是运行Memcache的用户,例如 ......

月下狼
30分钟前
0
0
xgboost-kaggle

https://www.kaggle.com/dansbecker/xgboost This tutorial is part of the Learn Machine Learning series. In this step, you will learn how to build and optimize models with the powe......

tantexian
30分钟前
0
0
nginx学习八 代理服务

最常用的语法 proxy_pass Syntax: proxy_pass URL;Default: --Context:location.if in location,limit_exception 反向代理 例:/etc/nginx/conf.d/default.conf 反向代理(代理服务端)......

Romanceling
38分钟前
0
0
npm ERR! Unexpected end of JSON ...

npm install 报错: npm ERR! Unexpected end of JSON input while parsing near '..."^2.8.14"},"_hasShrin' npm ERR! A complete log of this run can be found in: ... 打开终端 命令: 第......

大_侠
42分钟前
0
0
Android中的设计模式之责任链模式

参考 《设计模式:可复用面向对象软件的基础 》5.1 Chain of responsibility 职责链 对象行为型模式 《Android源码设计模式解析与实战》第9章 使编程更有灵活性--责任链模式 意图 使多个对象...

newtrek
45分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部