Redis 知识点总结 通过RabitMQ实现分布式事务 高焕堂《嵌入式UML设计》读书笔记_第一章 2020年中国5G在物联网行业:中国通信运营商5G投资达1.23万亿元(可下载) 面试题精选:数据伪造 繁忙的都市(并查集、Kruskal) BFS 力扣 200.岛屿数量 深度操作系统Deepin V20正式版 2020-09-13 【OS】Bankers Algorithm 用于调用的参数太少/写入位置时发生冲突/检测到无效的异常处理程序例程 后渗透之各种维持权限的后门原理即利用 MIPS Branch Target Buffer动态分支预测(BTB) Oracle实战优化:INSERT ALL关键字的应用 Linux中MySQL数据库的使用②-----数据的基本操作 理论+实验——MySQL备份与恢复 MySQL常用数据库函数 MySQL 备份与恢复(完全备份恢复--增量备份恢复+案例演示) MySQL之基础总结部分 Oracle实战优化:递归+分析函数+OLAP函数的应用 Linux中MySQL数据库的使用③-----编码和基本数据类型 理论+实验:MySQL备份与恢复(完整备份、增量备份) “数”聚永川 “智”引未来——永川区大数据智能化产业发展强劲 从一款防疫App感受新加坡大数据智能化气息 “数”聚永川“智”引未来——永川区大数据智能化产业发展强劲 从连接量变到数据质变 物联网将二次爆发 重磅发布!猎芯半导体首创全球最小支持5G物联网的多模多频射频PA芯片 从精准授信到助企惠民,江苏银行物联网金融派上大用场 Python Selenium UI自动化_WebDriver元素_8大定位方式+总结(持续更新完善) Python中的继承、抽象基类和接口 Datawhale学习笔记【阿里云天池 金融风控-贷款违约预测】task1 赛题理解 Pytorch - torchvision计算机视觉工具库 linux 重点笔记 Ubuntu18.04安装ROS Melodic(一路到站型) 小甲鱼笔记:数据结构——线性表(一)线性表的顺序存储结构,线性表顺序存储结构的增,删,插入元素操作 实战比特币脚本编程(1) JAVA WEB DAY 01_Tomcat & Servlet Java基础算法之堆排序(Heap Sort) synchronized批量重偏向与批量撤销 终于等到了!阿里P8历时九个月整理,Java面试宝典,核心知识点笔记在此 “数字心脏”动态解析消费密码,国家级消费市场大数据联合实验室在上海先行先试 全世界运行着大约230亿台物联网设备,安全问题如何解? 物联网产业园&thinkplus解决方案中心国学讲座如期而至 都是程序员,凭什么他能站在鄙视链的顶端? 猛男必看!去小红书做程序员是种什么体验 drozer提示[Errno 2] No such file or directory 【STM32】NB-iOT BC35-G模块 AT指令应用设计指导(附代码) 【北京迅为】i.MX6ULL终结者编译LED汇编程序 Linux系统读写网卡PHY寄存器工具 洛谷:P1226 【模板】快速幂||取余运算(分治,数学)
您的位置:首页 >运维 >

Redis 知识点总结

一、redis是什么

redis是一种支持Key-Value等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。该数据库使用ANSI C语言编写,支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。

redis是一个非关系型的数据库(not-only-sql即nosql),以键值对的方式存储数据,将数据存放在内存中,存取速度快,但是对持久化的支持不够好,所以redis一般配合关系型数据库使用,redis可以做分布式缓存,用在数据量大,高并发的情况下.redis通过很多命令进行操作,而且redis不适合保存内容大的数据.

二、redis的应用场景有哪些

会话缓存(最常用);消息队列;活动排行榜或计数;发布,订阅消息(消息通知);商品列表,评论列表等

三、redis数据类型

Redis一共支持五种数据类:string(字符串),hash(哈希),list(列表),set(集合)和zset(sorted set有序集合)。

字符串(字符串)

它是redis的最基本的数据类型,一个键对应一个值,需要注意是一个键值最大存储512MB 使用场景:常规key-value缓存应用,一般用于常规计数: 微博数, 粉丝数

hash(哈希)

hash是一个键值对的集合,是一个string类型的field和value的映射表,适合用于存储对象

是redis的简单的字符串列表,它按插入顺序排序 使用场景: 可以轻松地实现最新消息排行等功能,另一个应用就是消息队列

4.集合

是字符串类型的无序集合,也不可重复 利用Redis提供的Set数据结构,可以存储一些集合性的数据。在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。Redis还为集合提供了求交集、并集、差集等操作,可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中

sorted set有序集合

和Set相比,Sorted Set增加了一个权重参数score,使得集合中的元素能够按score进行有序排列并且是插入有序的,即自动排序。 使用场景:集合value可以是同学的学号,而score就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序,或者用Sorted Set来做带权重的队列,比如普通消息的score为1,重要消息的score为2,然后工作线程可以选择按score的倒序来获取工作任务,这样就做到了让重要的任务优先执行的效果

四、redis的服务相关的命令

slect#选择数据库(数据库编号0-15) 退出#退出连接 信息#获得服务的信息与统计 monitor#实时监控 config get#获得服务配置 flushdb#删除当前选择的数据库中的key flushall#删除所有数据库中的键

五、redis的发布与订阅

redis的发布与订阅(发布/订阅)是它的一种消息通信模式,一方发送信息,一方接收信息。 下图是三个客户端同时订阅同一个频道

六、redis的发布与订阅

redis的发布与订阅(发布/订阅)是它的一种消息通信模式,一方发送信息,一方接收信息。 下图是三个客户端同时订阅同一个频道

七、redis的持久化

redis持久有两种方式:快照(快照)、仅附加文件(AOF)

快照(RDB)

快照形式,定期把内存中当前时刻的数据保存到磁盘。Redis默认支持的持久化方案。速度快但是服务器断电的时候会丢失部分数据

将存储在内存的数据以快照的方式写入二进制文件中,如默认dump.rdb中900秒内如果超过1个Key被修改,则启动快照保存300秒内如果超过10个Key被修改,则启动快照保存60秒内如果超过10000个重点被修改,则启动快照保存

仅附加文件(AOF)

append only file。把所有对redis数据库操作的命令,增删改操作的命令。保存到文件中。数据库恢复时把所有的命令执行一遍即可。两种持久化方案同时开启使用AOF文件来恢复数据库.能保证数据的完整性,但是速度慢

使用AOF持久时,服务会将每个收到的写命令通过写函数追加到文件中(appendonly.aof)AOF持久化存储方式参数说明
appendonly yes #开启AOF持久化存储方式 appendfsync always #收到写命令后就立即写入磁盘,效率最差,效果最好appendfsync everysec#每秒写入磁盘一次,效率与效果居中appendfsync no #完全依赖操作系统,效率最佳,效果没法保证

redis的单线程为什么那么快

redis分客户端和服务端,一次完整的redis请求事件有多个阶段(客户端到服务器的网络连接–>redis读写事件发生–>redis服务端的数据处理(单线程)–>数据返回)。平时所说的redis单线程模型,本质上指的是服务端的数据处理客户端和服务器是socket通信方式,socket服务端监听可同时接受多个客户端请求也就是说,redis服务同时面对多个redis客户端连接请求,而redis服务本身是单线程运行。

redis 核心就是 如果我的数据全都在内存里,我单线程的去操作 就是效率最高的,为什么呢,因为多线程的本质就是 CPU 模拟出来多个线程的情况,这种模拟出来的情况就有一个代价,就是上下文的切换,对于一个内存的系统来说,它没有上下文的切换就是效率最高的。redis 用 单个CPU 绑定一块内存的数据,然后针对这块内存的数据进行多次读写的时候,都是在一个CPU上完成的,所以它是单线程处理这个事。在内存的情况下,这个方案就是最佳方案使用单线程的方式是无法发挥多核CPU 性能, 为了充分利用多核CPU,常常在一台server上会启动多个实例(即多个redis进程)。而为了减少切换的开销,有必要为每个实例(redis进程)指定其所运行的CPU而且因为redis是单线程的,所以不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗。

总结:CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了

解决redis主从结构宕机 如果在主从复制架构中出现宕机的情况,需要分情况看:

从Redis宕机

a)这个相对而言比较简单,在Redis中从库重新启动后会自动加入到主从架构中,自动完成同步数据;

b) 问题? 如果从库在断开期间,主库的变化不大,从库再次启动后,主库依然会将所有的数据做RDB操作吗?还是增量更新?(从库有做持久化的前提下)

不会的,因为在Redis2.8版本后就实现了,主从断线后恢复的情况下实现增量复制。

主Redis宕机

方法一:手动恢复

在从数据库中执行SLAVEOFNO ONE命令,断开主从关系并且将从库提升为主库继续服务将主库重新启动后,执行SLAVEOF命令,将其设置为其他库的从库,这时数据就能更新回来

方法二:哨兵功能自动恢复 基本原理是:心跳机制+投票裁决

通过sentinel模式启动redis后,自动监控master/slave的运行状态, 已经被集成在redis2.4+的版本中如果Master异常,则会进行Master-Slave切换,将其中一个Slave作为Master,将之前的Master作为Slave

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。