文档章节

Redis数据库笔记(一)

FEINIK
 FEINIK
发布于 2017/02/15 21:28
字数 1164
阅读 58
收藏 4
点赞 1
评论 1

一、对象

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

评论(1)

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

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

憨豆公子 ⋅ 2016/08/19 ⋅ 0

【Redis笔记-11】Redis开启远程访问

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

xidiancoder ⋅ 2017/11/09 ⋅ 0

Redis学习笔记(一)

什么是Redis? Redis是一种NOSQL数据库系统,它使用"key-value"类型数据。Redis也是一种纯粹的内存数据库,它的所有数据的存取操作都在内存中进行,这也使它能拥有非比寻常的高性能。 如何开...

derekxyz ⋅ 2014/04/01 ⋅ 0

redis学习笔记---redis主从复制

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

ivan-Zhao ⋅ 2015/12/14 ⋅ 1

Redis学习笔记一:NoSql及Redis介绍

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

孟飞阳 ⋅ 2016/07/04 ⋅ 0

OSChina 技术周刊第十六期 —— 每周技术精粹

每周技术抢先看,总有你想要的! 移动开发 【博客】[Android] AS 中 Gradle 配置运行浅析 服务端开发/管理 【软件】安全的即时聊天系统 Tox 【软件】HTTP 代理服务 gopee 【软件】流媒体平台...

OSC编辑部 ⋅ 2015/01/04 ⋅ 1

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 ⋅ 0

redis学习之redis的安装(linux)

redis简介: redis是一个nosql数据库,也就是非关系型数据库,数据保存在内存中而不是硬盘中,所以读取速度非常快,但是因为它是非关系型数据库,不适合用来存储复杂的数据,所以常用来做缓存...

贪挽懒月 ⋅ 05/16 ⋅ 0

redis 笔记(三)

2015-12-30 by Damon Redis的一下常见设置都是通过对 redis.conf 文件进行修改来完成的。 本文主要介绍了设置访问密码、主从配置、设置数据和日志目录、以及参数调优等方面。 一. 权限设置:...

水天云黑白 ⋅ 2016/01/25 ⋅ 0

Redis学习笔记---介绍、安装和通用命令

一、介绍 Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案。(这句话来源于网络,感谢作者)。redis支持多数据,每个数据库名称从0开始递增,不支...

ivan-Zhao ⋅ 2015/12/12 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JAVA RMI

什么是JAVA RMI Java RMI (Remote Method Invocation) 远程方法调用,能够让客户端像使用本地调用一样调用服务端 Java 虚拟机中的对象方法。RMI 是面向对象语言领域对 RPC (Remote Proced...

saulc ⋅ 18分钟前 ⋅ 0

Linux系统工程狮养成记

如今的社会,随着时代的发展,出现了很多职业,像电子类,计算机类的专业,出现了各种各样的工程师,有算法工程师,java工程师,前端工程师,后台工程师,Linux工程师,运维工程师等等,不同...

linux-tao ⋅ 28分钟前 ⋅ 0

进入编辑模式 vim命令模式 vim实践

1.

oschina130111 ⋅ 28分钟前 ⋅ 0

mysql用户管理、常用sql语句、mysql数据库备份恢复

1. mysql用户管理 mysql默认有一个root超级管理员账户,实际工作环境中不可能每个人都用此root权限,防止误操作、误删除,可以给单独的用户进行授权。 Mysql创建用户以及授权: grant all on...

laoba ⋅ 29分钟前 ⋅ 0

类型后面三个点(String...)和数组(String[])的区别

类型后面三个点(String…),是从Java 5开始,Java语言对方法参数支持一种新写法,叫可变长度参数列表,其语法就是类型后跟…,表示此处接受的参数为0到多个Object类型的对象,或者是一个Obj...

流氓兔- ⋅ 35分钟前 ⋅ 0

JEPLUS表格组件之表格合并——JEPLUS软件快速开发平台

JEPLUS表格组件之表格合并 我们在列表配置时会遇见这样的一种情况,需要对个人的数据进行统一化,对一些数据进行归类,这样展示出来美观又直观,在这篇笔记中我来给大家介绍下如何配置出来专...

JEPLUS ⋅ 36分钟前 ⋅ 0

golang 并发中全局唯一操作

package main// go 携程共享 数据// 加锁解锁操作// 同步锁import ("sync""fmt")// 创建Once结构var once = sync.Once{}func computed(data *int, lock *sync.Mut...

304158 ⋅ 37分钟前 ⋅ 0

Mobx入门之二:asynchronous actions

这一节主要看mobx怎么实现asynchronous actions 1 要实现的demo功能 输入地名,查询天气,利用openweathermap api 2 思想 observable观察数据:location地点、temperature温度 observer响应式...

pengqinmm ⋅ 39分钟前 ⋅ 0

【2018.0620学习笔记】【linux高级知识 13.4-13.6】

13.4 mysql用户管理 创建用户并授权: grant all on *.* to '用户名'@'ip' identified by '密码' //all是操作权限,*.*是库.表,指定格式是'用户名'@'localhost'才能用socket登录本地 gra...

lgsxp ⋅ 今天 ⋅ 0

Java强弱引用示例

package jdk;import java.lang.ref.PhantomReference;import java.lang.ref.ReferenceQueue;import java.lang.ref.SoftReference;import java.lang.ref.WeakReference;public ......

月下狼 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部