Redis 阶段总结
Redis 阶段总结
- 基础
- 什么是Redis?
- 为什么 Redis 需要把所有数据放到内存中?
- 应用
- Redis 能用来做什么?
- Reids数据类型
- Redis是单进程单线程的吗?
- 什么是缓存? 缓存雪崩、缓存穿透、缓存击穿的含义以及解决方案?
- 缓存雪崩
- 缓存穿透
- 缓存击穿
- Redis 数据淘汰策略有哪些?
- Redis提供了哪几种持久化方式?
- 怎么理解 Redis 事务?
- Redis如何做内存优化?
- 什么是单点登录?
- 假如 Redis 里面有 1 亿个 key,其中有 10w 个 key 是以 某个固定的已知的前缀开头的,如果将它们全部找出来?
基础
什么是Redis?
Redis 是一款非常流行的NoSQL数据库,一个高性能的 key-value 数据库。
整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据 flush 到硬盘上进行保存。
缺点:由于他受到物理内存的限制,因此无法用作海量数据的高性能读写。
为什么 Redis 需要把所有数据放到内存中?
- Redis 为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘,所以 Redis 具有高速读写和数据持久化的特征
- 如果程序直接与磁盘交互,磁盘 IO 速度会严重影响 Redis 的性能
- 内存的硬件成本降低,使得 Redis 更受欢迎。
应用
Redis 能用来做什么?
会话缓存,排行榜,计数器,发布,订阅,地图信息分析(附近的人)
- 记录帖子的点赞数、评论数和点击数 (
hash
)。 - 记录用户的帖子 ID 列表 (排序),便于快速显示用户的帖子列表 (
zset
)。 - 记录帖子的标题、摘要、作者和封面信息,用于列表页展示 (
hash
)。 - 记录帖子的点赞用户 ID 列表,评论 ID 列表,用于显示和去重计数 (
zset
)。 - 缓存近期热帖内容 (帖子内容空间占用比较大),减少数据库压力 (
hash
)。 - 记录帖子的相关文章 ID,根据内容推荐相关帖子 (
list
)。 - 如果帖子 ID 是整数自增的,可以使用 Redis 来分配帖子 ID(
计数器
)。 - 收藏集和帖子之间的关系 (
zset
)。 - 记录热榜帖子 ID 列表,总热榜和分类热榜 (
zset
)。 - 缓存用户行为历史,进行恶意行为过滤 (
zset
,hash
)。
Reids数据类型
常用5种数据类型:string,list,set,zset,hash
一个字符串类型的值能存储最大容量是多少?512M
三种特殊数据类型:
geospatial:地理位置
hyperloglog:基础统计,统计一个集合中不重复的数据,使用位运算的方式,但是存在0.81%错误率。
bitmap:位图,只记录0和1。
Redis是单进程单线程的吗?
Redis是单进程单线程的,Redis利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销。
多线程处理会涉及到锁,而且多线程处理会涉及到线程切换而消耗CPU。因为CPU不是Redis 的瓶颈,Redis的瓶颈最有可能是机器内存或者网络带宽。
单线程无法发挥多核CPU性能,不过可以通过在单机开多个Redis实例来解决。全新的redis6.0,正式支持多线程。
什么是缓存? 缓存雪崩、缓存穿透、缓存击穿的含义以及解决方案?
数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。
缓存雪崩
大量的key设置了相同的过期时间,导致在缓存在同一时刻全部失效,造成瞬时DB请求量大、压力骤增,引起雪崩。
解决方案
可以给缓存设置过期时间时加上一个随机值时间,使得每个key的过期时间分布开来,不会集中在同一时刻失效。
缓存穿透
访问一个不存在的key,缓存不起作用,请求会穿透到DB,流量大时DB会挂掉。
解决方案
采用布隆过滤器,使用一个足够大的bitmap,用于存储可能访问的key,不存在的key直接被过滤;
访问key未在DB查询到值,也将空值写进缓存,但可以设置较短过期时间。
缓存击穿
一个存在的key,在缓存过期的一刻,同时有大量的请求,这些请求都会击穿到DB,造成瞬时DB请求量大、压力骤增。
解决方案
在访问key之前,采用SETNX(set if not exists)来设置另一个短期key来锁住当前key的访问,访问结束再删除该短期key。
Redis 数据淘汰策略有哪些?
Redis 提供 6种内存淘汰策略
- Volatile-lru:从设置了过期时间的数据集中,选择最近最少使用的数据释放。
- Allkeys-lru:从数据集中(包括设置过期时间以及未设置过期时间的数据集中),选择最近最少使用的数据释放。
- Volatile-random:从设置了过期时间的数据集中,随机选择一个数据进行释放。
- Allkeys-random:从数据集中(包括了设置过期时间以及未设置过期时间的数据集)随机选择一个数据进行入释放。
- Volatile-ttl:从设置了过期时间的数据集中,选择马上就要过期的数据进行释放。
- Noeviction:不删除任意数据(但Redis还会根据引用计数器进行释放),这时如果内存不够时,会直接返回错误。
Redis提供了哪几种持久化方式?
Redis主要提供了两种持久化机制:RDB
和AOF
:
RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。
AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。
怎么理解 Redis 事务?
redis对事务的支持目前还比较简单。redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令。 由于redis是单线程来处理所有client的请求的所以做到这点是很容易的。
redis没有回滚的概念,已经执行的动作不能undo
。当事务在执行EXEC命令之前出现错误,则redis会清空事务队列,放弃执行事务。在EXEC之后redis批量执行命令时产生的错误会被忽略,其他命令继续执行(这是全部执行的真正含义)。在执行的过程中,redis命令只会因为错误的语法而失败,因此,事务无罪。
Redis如何做内存优化?
尽可能使用散列表
(hashes),散列表(是说散列表里面存储的数少)使用的内存非常小, 所以你应该尽可能的将你的数据模型抽象到一个散列表里面。比如你的web系统中有一个用 户对象,不要为这个用户的名称,姓氏,邮箱,密码设置单独的key,而是应该把这个用户的 所有信息存储到一张散列表里面。
什么是单点登录?
单点登录(Single Sign On),简称为SSO
,是比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
简单来说,单点登录就是在多个系统中,用户只需一次登录,各个系统即可感知该用户已经登录。
原理: SSO系统生成一个token
,并将用户信息存到Redis中,并设置过期时间。
其他系统请求SSO系统进行登录,得到SSO返回的token,写到Cookie中
每次请求时,Cookie都会带上,拦截器得到token,判断是否已经登录。
假如 Redis 里面有 1 亿个 key,其中有 10w 个 key 是以 某个固定的已知的前缀开头的,如果将它们全部找出来?
使用 keys
指令可以扫出指定模式的 key 列表。
如果这个 redis 正在给线上的业务提供服务,那使用 keys 指令会 有什么问题?
redis 的单线程的,keys指令会导致线程阻塞一段时间,线上服务会停顿,直到指令执行完毕,服务才能恢复。这个时 候可以使用 scan
指令,scan指令可以无阻塞的提取出指定模式的 key 列表,但 是会有一定的重复概率,在客户端做一次去重就可以了,但是整体所花费的时间 会比直接用 keys 指令长。
Redis 阶段总结相关推荐
- Redis离线搭建主从结构
最近给跟总公司那边做项目,权限管理比较严个,服务器不能链接外网没办法yum安装redis服务,写下这篇记录下离线搭建redis过程. 本次搭建的机器属性:centos7.2 root权限下,由于保密 ...
- 2108 课前资料说明
第一部分:课前资料说明 博客地址:https://blog.csdn.net/maitian_2008 天翼云盘:https://cloud.189.cn/t/MFJVf23u22Un 访问码:tw3 ...
- 自动化测试python 成长路线_自动化测试工程师成长路线规划
随着互联网产品功能的迭代更新,对软件质量和数据安全也逐渐提出了更高的要求.因此,测试在目前的地位和功能可以说是越来越不可或缺了.虽然目前的就业市场继续大量的测试人才,但是低端的测试人员还是比较饱和的. ...
- 加米谷学院大数据培训课程安排
对于0基础学员来说,加米谷学院的大数据培训课程安排是什么样呢? 大数据开发工程师课程体系--Java部分. 第一阶段:静态网页基础 1.学习Web标准化网页制作,必备的HTML标记和属性 2.学习HT ...
- 30岁、高中学历、零基础、能不能自学Python?要多久?学到什么程度可以找到工作?
前言 零基础自学三个月 足够找到工作的了.如果你是全职学的话,学习300个小时 就足够在北上广 找到一份 6000左右的入门工作了(2020年待遇水平). 我发现很多人有个误区,认为转行 软件开发 一 ...
- 大数据开发需要数学好吗?
大数据开发是和数据相关的工作,很多人有疑问,想从事大数据相关工作,是不是对数学有很高的要求,那么,做大数据真的需要数学很好吗? 大数据可以分为很多岗位,不同的岗位对数学的要求不同,只有少部分的大数据岗 ...
- 2111-课前资料及授课说明
第一部分:课前资料说明 博客地址:https://yutian.blog.csdn.net/ 天翼云盘:https://cloud.189.cn/t/MFJVf23u22Un 访问码:tw3w (不限 ...
- 2109课前资料及授课说明
第一部分:课前资料说明 博客地址:https://yutian.blog.csdn.net/ 天翼云盘:https://cloud.189.cn/t/MFJVf23u22Un 访问码:tw3w (不限 ...
- 第五阶段-第五阶段高性能分布式缓存Redis
第五阶段 大型分布式系统缓存架构进阶 文章目录 第五阶段 大型分布式系统缓存架构进阶 第一部分 Redis 快速实战 第一节 缓存原理与设计 1.1 缓存基本思想 1.11 缓存的使用场景 1.12 ...
最新文章
- 核爆rpg手机版_好嗨游戏:不玩吃亏 ,20款全世界最佳移动RPG角色扮演游戏(上)...
- hdu 2594 kmp
- python【蓝桥杯vip练习题库】ADV-186排列式
- 天转凉了,注意保暖,好吗(需求规格说明书放在github了)
- 分享个人预算系统源码(含说明文档)
- Git 提交报错,账户和密码错误 和 git add/git commit 文件太大太多
- 解决办法:java.lang.UnsatisfiedLinkError ... Can't find dependent libraries
- 潍坊OA:通达OA协同办公标准解决方案
- Matlab R2019a Win64位 迅雷下载链接
- 1.3.1 互联网的边缘部分(资源子网)
- 使用软碟通安装win7
- 魅族pro5 刷机 android,魅族 PRO5中文Recovery刷机教程
- 狂神说SpringMVC课堂笔记
- Data()笔记之getDate()的基本用法
- 提交application/x-www-form-urlencoded类型数据
- 微软输入法自动导入小鹤双拼
- 什么是增值税的进项税和销项税?
- 中国古代经典励志名言100句,百读不厌,陪孩子一起读经典!
- CMD命令窗口全屏设置
- OpenFlow简单介绍
热门文章
- linux 命令行管理,Linux命令行界面下的用户和组的管理
- 计算机软考可以直接高级吗,计算机软考没有中级能考高级吗
- spring的整体架构分析一
- 未能加载文件或程序集“Newtonsoft.Json, Version=4.5.0.0, Culture=neutral,解决
- Python学习 Day4-1 Python3 条件控制、循环语句
- SQL 创建随机时间的函数
- 【Windows】线程漫谈——线程同步之信号量和互斥量
- 【转】使用 F#、MapReduce 和 Windows Azure 分析日志文件
- 中断挂起是什么意思_深入JVM(三)- 什么是垃圾及垃圾回收算法
- java scheduler_RxJava Scheduler介绍