Redis总结笔记
Redis总结笔记
应用场景
- 缓存——热数据
- 计算器
- 队列
- 位操作
- 分布式锁与单线程机制
- 最新列表
- 排行榜
Maxmemory-policy算法
- volatile-lru:使用LRU算法移除key,只对设置了过期时间的键。
- allkeys-lru:使用LRU算法移除key。
- volatile-random:在过期集合中移除随机的key,只对设置了过期的时间的键。
- allkeys-random:移除随机的key。
- volatile-ttl:移除那些TTL值最小的key,即那些最近要过期的key。
- noeviction:不进行移除。针对写操作,只返回错误信息。
RDB
介绍
小总结
- RDB是一个非常紧凑的文件。
- RDB在保存RDB文件是父进程唯一需要做的就是fork出一个子进程,接下来的工作全部由子进程来做,父进程不需要再做其他I/O操作,所以RDB持久化方式可以最大化Redis的性能。
- 与AOF相比,在回复大的数据集的时候,RDB方式会更快一些。
- 数据丢失风险大。
- RDB需要经常fork子进程来保存数据集到硬盘上,当数据集比较大的时候,fork的进程过程是非常耗时的,可能会导致Redis在一些毫秒级不能响应客户端请求。
AOF
优势
劣势
小总结
- AOF文件是一个只进行追加的日志文件。
- Redis可以在AOF文件体积变得过大时,自动地在后台对AOF进行重写。
- AOF文件有序地保存了对数据库执行的所有写入操作,这些写入操作以Redis协议的格式保存,因此AOF文件的内容非常容易被人读懂,对文件进行分析也很轻松。
- 对于相同的数据集来说,AOF文件的体积通常要大于RDB文件的体积。
- 根据所使用的fsync策略,AOF的速度可能会慢于RDB。
持久化总结
- RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储。
- AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候回重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾。
- Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大。
- 只做缓存:如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式。
- 同时开启两种持久化方式。
- RDB的数据不实时,同时使用两者时服务器重启也只会找AOF文件。那要不要只使用AOF呢?
- 作者建议不要,因为RDB更适合用于备份数据库(AOF在不断变化不好备份)。
- 快速重启,而且不会有AOF可能潜在的BUG,留着作为一个万一的手段。
- 性能建议。
- 因为RDB文件只用做后备用途,建议只在Slave上持久化RDB文件,而且只要15分钟备份一次就够了,只保留save 900 1这条规则。
- 如果Enable AOF,好处是在最恶劣情况下也智慧丢失不超过两秒的数据,启动脚本比较简单只load自己的AOF文件就可以了。代价以是带来了持续的I/O,二是AOF rewrite的最后将rewrite过程中产生的新数据写到新文件造成的阻塞几乎是不可避免的。只要硬盘许可,应该尽量减少AOF rewrite的频率,AOF重写的基础大小默认值64M大小了,可以设到5G以上,默认超过原大小的100%大小时重写可以改到适当的数值。
- 如果不Enable AOF,仅靠Master-Slave Replication实现高可用也可以,能省掉一大笔I/O也减少了rewrite时带来的系统波动,代价是如果Master/Slave同时挂掉,会丢失十几分钟的数据,启动脚本也要比较买两个Master/Slave中的RDB文件,载入较新的那个,新浪微博就选用了这种架构。
事务
小结
- Watch指令类似乐观锁,事务提交时,如果key的值已被别的客户端改变,比如某个list已被别的客户端push/pop过了,整个事务队列不会被执行。
- 通过Watch命令在事务执行之前监听了多个keys,倘若在Watch之后有任何key的值发生了变化,Exec命令执行的事务都会被放弃,同时Nullmulti-bulk应答以通知调用者事务执行失败。
主从复制
配置从(库)不配主(库)
从库配置:slaveof主库IP主库端口
- 每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件。
- Info Replication。
修改配置文件细节操作
- 拷贝多个redis.conf文件。
- 开启daemonize yes。
- Pid文件名字。
- 指定端口。
- Log文件名字。
- Dump.rdb名字。
常用三招
- 一主二仆
- Init。
- 一个Master两个Slave。
- 日志查看。
- 主从问题演示。
- 能干嘛。
- 怎么玩。
- 复制原理。
- Slave启动成功连接到Master后会发送一个sync命令。
- Master连接命令启动后台的存盘进程,同时收集所有接受到的用于修改数据命令,在后台进程执行完毕之后,master将传送整个数据到slave,以完成一次完全同步。
- 全量复制:而Slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
- 增量复制:Master继续将新的所有收集到的修改命令一次传给slave,完成同步,但是只要重新连接master,一次完全同步(全量复制)将被自动执行。
- 哨兵模式。
- 是什么。
- 怎么玩。
- 自定义/myredis目录下新建sentinel.conf文件,名字绝对不能错。
- 配置哨兵,填写内容
- sentinel monitor被监控的数据库名字(自己起名字)如:127.0.0.1 6379 1。
- 上面最后的一个数字1,表示主机挂掉后slave投票看让谁接替为主机,得票数多称为主机。
- 启动哨兵。
- Redis-sentinel /myredis/sentinel.conf。
- 上述目录依照各自的实际情况配置,可能目录不同。
- 正常主从演示。
- 原有的master挂了。
- 投票新选。
- 重新主从继续开工,Info Replication查查看。
- 问题:如果之前的master重新回来,会不会master冲突?
- 一组sentinel能同时监控多个master。
- 复制缺点。
- 由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题变得更加严重。
- 薪火相传
- 反客为主
- SlaveOf no one。使当前数据库停止与其他数据库同步,转为主数据库。
需了解的问题:
- RDB成功恢复,RDB可以搞定备份为什么会有OAF。新技术的出现一定要弥补老技术的不足同不同意,新技术一定会借鉴老技术,是老技术的子类,一般子类要比父类强大?
- 如果一个系统里面同时存在RDB和AOF是冲突还是协作?
- 为什么AOF会在RDB之后产生?
- AOF有什么优缺点?
一主二从典型问题
- 主机写入k1,从机写入k1,会报错,从机只能读。
- 主机宕机,从机不会上位争master,从机原地待命,如果主机重新恢复,主机写入,从机依然能获取到数据。
- 从机宕机了,主机能够写入,从机重启后需重新连接主机才能获取到主机数据,或者写入配置中。
- 从机备份时,是把主机的数据全部重新同步一遍。
Redis总结笔记的更多相关文章
- redis 学习笔记(6)-cluster集群搭建
上次写redis的学习笔记还是2014年,一转眼已经快2年过去了,在段时间里,redis最大的变化之一就是cluster功能的正式发布,以前要搞redis集群,得借助一致性hash来自己搞shardi ...
- Redis学习笔记~目录
回到占占推荐博客索引 百度百科 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合). ...
- Redis学习笔记4-Redis配置详解
在Redis中直接启动redis-server服务时, 采用的是默认的配置文件.采用redis-server xxx.conf 这样的方式可以按照指定的配置文件来运行Redis服务.按照本Redi ...
- Redis学习笔记7--Redis管道(pipeline)
redis是一个cs模式的tcp server,使用和http类似的请求响应协议.一个client可以通过一个socket连接发起多个请求命令.每个请求命令发出后client通常会阻塞并等待redis ...
- redis入门笔记(2)
redis入门笔记(2) 上篇文章介绍了redis的基本情况和支持的数据类型,本篇文章将介绍redis持久化.主从复制.简单的事务支持及发布订阅功能. 持久化 •redis是一个支持持久化的内存数据库 ...
- redis入门笔记(1)
redis入门笔记(1) 1. Redis 简介 •Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure serv ...
- Redis学习笔记一:数据结构与对象
1. String(SDS) Redis使用自定义的一种字符串结构SDS来作为字符串的表示. 127.0.0.1:6379> set name liushijie OK 在如上操作中,name( ...
- Redis学习笔记之ABC
Redis学习笔记之ABC Redis命令速查 官方帮助文档 中文版本1 中文版本2(反应速度比较慢) 基本操作 字符串操作 set key value get key 哈希 HMSET user:1 ...
- (转)redis 学习笔记(1)-编译、启动、停止
redis 学习笔记(1)-编译.启动.停止 一.下载.编译 redis是以源码方式发行的,先下载源码,然后在linux下编译 1.1 http://www.redis.io/download 先 ...
- Redis学习笔记(二)-key相关命令【转载】
转自 Redis学习笔记(二)-key相关命令 - 点解 - 博客园http://www.cnblogs.com/leny/p/5638764.html Redis支持的各种数据类型包括string, ...
随机推荐
- LeetCode:动态规划
动态规划 动态规划永远的神 这部分主要是学习了 labuladong 公众号中对于动态规划的讲解 刷了些 leetcode 题,在此做一些记录,不然没几天就忘光光了 题目 这部分内容直接上题目了,解题 ...
- [调试笔记] 10.8模拟赛11 T4 甜圈
这题正解线段树维护哈希,同机房神犇已经讲的很明白了.这里只说sbwzx在调试的时候犯的sb错误. 1.关于pushdown和update 众所周知,sbwzx一写带lazy的线段树,就必在pushdo ...
- pyqgis环境配置
配置pyqgis开发环境时,很多网上教程写的非常繁琐,这里仅仅找了一个最简单的配置方法,使用pycharm的IDE,安装QGIS软件后,在pycharm的ProjectInterpreter里面填写Q ...
- Python环境配置详细步骤以及第一个程序
打开python官网:https://www.python.org/ 在官网找与自己电脑系统匹配的版本路径 这里以python3.7.2版本为例: 下载完成后,使用管理员身份进行安装: 打开命令提 ...
- js fetch异步请求使用详解
目录 认识异步 fetch(url) response.json() 结合async和await 异常处理 post请求 认识异步 首先我们得明白请求是一个异步的过程. 因为请求需要时间向服务器发送请 ...
- 【高并发】深入解析Callable接口
大家好,我是冰河~~ 本文纯干货,从源码角度深入解析Callable接口,希望大家踏下心来,打开你的IDE,跟着文章看源码,相信你一定收获不小. 1.Callable接口介绍 Callable接口是J ...
- Windows漏洞:MS08-067远程代码执行漏洞复现及深度防御
摘要:详细讲解MS08-067远程代码执行漏洞(CVE-2008-4250)及防御过程 本文分享自华为云社区<Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御>,作者 ...
- hover 背后的数学和图形学
前端开发中,hover是最常见的鼠标操作行为之一,用起来也很方便,CSS直接提供:hover伪类,js可以通过mouseover+mouseout事件模拟,甚至一些第三方库/框架直接提供了 hover ...
- JVM核心——JVM运行和类加载全过程
1.类加载全过程 (1)类加载机制 JVM把class文件加载到内存,并对数据进行校验.解析和初始化,最终形成JVM可以直接使用的Java类型的过程. 加载 将class文件字节码内容加载到内存中,并 ...
- [hdu7062]A Simple Problem
称序列$\{a_{1},a_{2},...,a_{n}\}$的答案为$\min_{0\le i\le n-k}(\max_{i<j\le i+k}a_{j})$(特别的,若$n<k$ ...