【精华】Redis的2356要点(一篇就够)

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 缓存击穿、缓存穿透、缓存雪崩、二级缓存、原子性、2种持久化策略、3种集群方式、5种数据类型及内存存储方式、6种淘汰策略。

在这里插入图片描述

一、redis和缓存相关概念

redis是C语言开发的一个开源的高性能key-value键值对的内存数据库。单进程单线程,线程安全,采用IO多路复用机制。
  • 缓存击穿:大量请求同一个key,当这个key在失效的瞬间,大并发请求直接打到DB上
  • 缓存穿透:频繁请求缓存和数据库中都不存在的数据。
  • 缓存雪崩:缓存大面积同一时间点失效,所有请求直接打到DB上。
  • 二级缓存:当需要缓存大量数据的时候可以使用Redis缓存数据库来保存Mybatis的二级缓存数据。
  • 原子性
    在单线程中,能够在单条指令中完成的操作都可以认为是原子操作,因为中断只 能发生在指令之间。
    在多线程中,不能被其他进程(线程)打断的操作就叫原子操作。

二、redis的2种持久化策略

Redis支持数据的持久化。为了保证效率,数据缓存在了内存中,但是会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件中,以保证数据的持久化。

  1. RDB:快照形式是直接把内存中的数据保存到一个 dump 的文件中,定时保存。如果你非常关心你的数据,但仍然可以承受数分钟内的数据丢失,那么可以只使用 RDB持久。
  2. AOF:把所有的对 Redis 的服务器进行修改的命令都存到一个文件里(命令的集合)。AOF的默认策略是每秒钟 Fsync 一次,在这种配置下,就算发生故障停机,也最多丢失一秒钟的数据,但处理巨大的写入会降低Redis的性能,且AOF 的文件体积通常要大于 RDB 文件的体积。

Redis 默认是快照 RDB 的持久化方式,但Redis 支持同时开启 RDBAOF,系统重启后,Redis 会优先使用 AOF 来恢复数据,因为 AOF 文件保存的数据集通常比 RDB 文件所保存的数据集更完整,这样丢失的数据会最少。

三、redis的3种集群方式

  1. 主从复制:Redis支持数据的备份,即master-slave模式的数据备份,可以一主多从。缺点:主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。
  2. 哨兵模式:哨兵模式是基于主从模式的,所有主从的优点,哨兵模式都具有。哨兵的作用就是监控Redis系统的运行状况。它的功能包括两个:(1)监控主服务器和从服务器是否正常运行。(2)主服务器出现故障时自动将从服务器转换为主服务器。
  3. 集群:redis的哨兵模式基本已经可以实现高可用,读写分离 ,但是在这种模式下每台redis服务器都存储相同的数据,很浪费内存,所以在redis3.0上加入了cluster模式,实现的redis的分布式存储,也就是说每台redis节点上存储不同的内容。Redis-Cluster采用无中心结构,它的特点如下:

    • 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。

      • 节点的fail是通过集群中超过半数的节点检测失效时才生效。
      • 客户端与redis节点直连,不需要中间代理层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。

在这里插入图片描述

四、redis的5种数据类型及内存存储方式

redis内部使用redisObject类型表示Key和Value对象。

在这里插入图片描述

如上图所示:type表示一个value对象是何种数据类型,encoding表示不同数据类型再redis内部的存储方式。比如:type=string encoding=raw or int

string

Value 可以是字符串,也可以是数字。String 类型是二进制安全的,意思是 Redis 的 String 类型可以包含任何数据,比如 jpg 图片或者序列化的对象。String 类型的值最大能存储 512M。

hash

是一张 String 的 Key 和 Value 的映射表,Hash 特别适合存储对象。常用命令:hget,hset,hgetall 等。

list

string类型的列表,按照插入顺序排序,可以用做消息队列。可以添加元素到头部或尾部。常用命令:lpush、rpush、lpop、rpop、lrange(获取列表片段)。

set

string类型的无序集合,自动去重,且提供了判断某个元素是否在set中。常用命令:sadd、spop、smembers、suion等。

zset(sotred set)

string类型的有序集合,自动去重,自动排序。通过用户提供的double类型的score参数来为成员排序。
在这里插入图片描述

五、redis的6种淘汰策略

  • 从已设置过期时间的KV集中选择(3种)

    • 最近最少用
    • 剩余时间最短
    • 随机选择
  • 从所有KV集中选择(2种)

    • 最近最少用
    • 随机选择
  • 不淘汰

在这里插入图片描述

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
6月前
|
存储 缓存 NoSQL
由菜鸟到大神,谈谈redis的概念、实战、原理、高级使用方法
【5月更文挑战第18天】Redis是一个开源的内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如字符串、哈希、列表、集合、有序集合等。
99 10
|
6月前
|
存储 缓存 NoSQL
Redis基础开篇
Redis基础开篇
60 0
|
存储 NoSQL 关系型数据库
【Redis从头学-0】一张思维导图对Redis做出基本介绍
【Redis从头学-0】一张思维导图对Redis做出基本介绍
100 0
|
缓存 NoSQL Java
【Redis从头学-完结】Redis全景思维导图一览!耗时半个月专为Redis初学者打造!
【Redis从头学-完结】Redis全景思维导图一览!耗时半个月专为Redis初学者打造!
283 0
|
运维 监控 NoSQL
Redis 源码阅读指导(一)
Redis 源码阅读指导(一)
114 0
|
消息中间件 缓存 运维
不要小看一个Redis!从头到尾全是精华,阿里Redis速成笔记太香了
Redis想必大家都听说过,不管是面试还是工作上我们都能见到。但是Redis到底能干什么?又不能干什么呢?(如下图)
|
存储 缓存 监控
Redis学习最终版:面试题合集
Redis是一个支持持久化的内存数据库,通过持久化机制把内存中的数据同步到硬盘文件来保证数据持久化。
Redis学习最终版:面试题合集
|
SQL NoSQL 安全