1. redis基础
1.1. 定义
redis是一个开源的、使用C语言编写的、支持网络交互的、基于内存可持久化的高性能key-value型NoSQL数据库
1.2. 数据类型
-
- String 字符串 整数 浮点数
- Hash 包含键值对的无序散列表
- List 一个链表,链表上的每个节点都包含了一个字符串
- Set 包含字符串的无序收集器,并且被包含的每个字符串都是独一无二,各不相同
- SortedSet(Zset)字符串成员,与浮点数分值之间的有序映射,元素的排列顺序由分值的大小决定。
1.3.官方下载地址
2.redis实现
2.1 简单安装
通过官方地址下载压缩包
tar xzf redis压缩包
mv 到存储位置
make 进行安装
2.2 启动实例
2.2.1 默认启动
进入redis目录的src文件夹
./redis-server 会使用默认配置
2.2.2 根据配置文件启动
//是否后台启动 daemonize no/yes //默认端口 port 6379 //AOF开关 appendonly no/yes //日志位置 logfile /var/log/redis.log //RDB持久化数据文件 logfile /var/log/redis.log //启动.
/redis-server
/etc/redis/redis
.conf
3.redis持久化
3.1 AOF(Append Only File)
3.1.1 定义
它的出现是为了弥补RDB的不足(数据不一致),采用了日志的形式记录每个写操作,并追加到文件中。Redis重启的会根据日志文件的内容通过写指令从前到后执行一次完成数据的恢复工作。
3.1.2 更新日志条件
always:同步持久化,每次发生数据变化会立刻写入到磁盘中。
everysec:出厂默认推荐,每秒记录一次(默认值)
no: 不同步
3.1.3 AOF的重写机制
AOF是会不断地命令追加到文件的末尾,所以随着写入命令的不断增加,AOF的体积也会变得越来越大,执行BGREWRITEOF命令,Redis将生产一个新的AOF文件,这个文件包含重建当前数据集所需最少命令。
3.1.4 优缺点
优点:数据的完整性和一致性
缺点:AOF的内容变多,文件会越来越大,数据恢复也会越来越慢
3.1.5 操作
第一步:修改配置文件,开启AOF持久化配置
第二步:重启Redis服务,并进入Redis自带的客户端
第三步:保存值,然后模拟数据丢失,关闭Redis服务
第四步:重启服务,发现数据恢复了
第五步:修改appendonly.aof,模拟文件异常情况
第六步:重启Redis服务失败。这同时也说明了,RDB和AOF可以同时存在,且优先加载AOF文件
第七步:校验appendonly.aof文件。重启Redis服务后正常
3.2 RDB(Redis DataBase)
3.2.1 定义
Redis默认的持久化方案,在指定的时间间隔内,执行制定次数的写操作,则会将内存中的数据写入到磁盘中。即在指定目录下生成一个dump.rdb文件。Redis重启会通过加载dump.rdb文件恢复程序
3.2.2 优缺点
优点:1 适合大规模的数据恢复
2 如果业务对数据完整性和一致性不高,RDB是很好的选择
缺点:1 数据的完整性和一致性不高,因为RDB可能在最后一次备份时宕机
2 备份时占用内存,因为Redis在备份时会独立创建一个子进程,将数据写入到一个临时文件(原来的数据的两倍),最后再将临时文件替换之前的备份文件。
3.2.3 操作
第一步:vim修改持久化配置时间,120秒内修改5次则持久化一次
第二步:重启服务配置生效
第三步:分别set5个key,过两分钟后,在bin的当前目录下会自动生产一个dump.rdb文件。
第四步:将当前的dump.rdb备份一份(模拟线上工作)
第五步:执行FLUSHALL命令清空数据库数据
第六步:重启Redis服务,恢复数据,数据不见了,因为FLUSHALL也有触发RDB快照功能
第七步:将备份的dump_bk.rdb替换dump.rdb然后重启redis
4.问题收集
Redis是单进程单线程的
redis利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销
Redis的回收策略
volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
no-enviction(驱逐):禁止驱逐数据
redis相比memcached有哪些优势?
- memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型
- redis的速度比memcached快很多
- redis可以持久化其数据
原文地址:https://www.cnblogs.com/shaoxiaosa/p/7700187.html