redis总结,收藏背过,面试必过!!!

redis就是一个底层由C语言编写的非关系型数据库,它主要是用来做缓存,因为他把数据主要以键值对的形式存放在内存上,所以读取非常快。一般应用于消息队列(支付、排行榜等)、会话缓存、消息通知等场景

它有五种数据类型:字符串String、哈希Hash、列表List、集合Set、有序集合Zset,常用的主要是前四种。

redis是一个用C语言编写的非关系型(Nosql)的数据库,可以存储键和五种不同类型的值之间的映射,键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。

  • 与传统数据库不同的时redis的数据是存在内存中的,所以读写也非常快,因此redis被广泛应用于缓存方向。redis也常用作分布式锁。除此,redis支持事务、持久化、LUA脚本、LRU驱动时间、众多集群方案

    Redis 的应用场景包括:缓存系统(“热点”数据:高频读、低频写)、计数器、消息队列系统、排行榜、社交网络和实时系统。

    优势

    1.他是存在内存里的,读取速度快

    2.我所用到不需要连表查询,所以那些关系表数据库的优势用不到

    3.redis可以建立在多个服务器里,进行同步

五大数据类型

String(字符串 用法: 键 值),Hash(哈希 类似Java中的 map 用法: 键 键值对),List(列表 用法:键 集合 不可以重复),Set(集合 用法:键 集合 可以重复),Zset(sorted set 有序集合 用法: 键 值 值)

字符串String、

string 是 redis 最基本的类型,一个 key 对应一个 value。

string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。

string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。

哈希Hash、

Redis hash 是一个键值(key=>value)对集合。

Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

列表List、

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

集合Set、

Redis的Set是string类型的无序集合。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

有序集合Zset

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

zset的成员是唯一的,但分数(score)却可以重复。

缓存穿透、缓存击穿、缓存雪崩

缓存穿透

缓存穿透

解释:访问一个缓存和数据库都不存在的key,缓存不起作用,请求会穿透到DB,流量大时DB可能会挂掉。

解决:1).访问key未在DB查询到值,将空值写进缓存,但可以设置较短的过期时间。2).可能是非法攻击,通过接口先做校验,不通过则直接返回。3).使用布隆过滤器存储所有可能访问的 key,不存在的key直接被过滤,存在的key则再进一步查询缓存和数据库。

缓存雪崩

缓存雪崩

解释:缓存在同一时刻大量失效,造成DB瞬时请求量大、压力骤增,引起雪崩。

解决:1).给过期时间时加个随机值时间,使过期时间分布开来,不会集中。2).加锁互斥。3).热点数据不过期。

缓存击穿

缓存击穿

解释:一个热点key,在缓存过期后,同时有大量的请求,这些请求都会击穿到DB,造成瞬时DB请求量大、压力骤增。

解决:1).加锁互斥。2).热点数据不过期。

持久化两种

持久化机制能够保证 Redis 储存的数据不会因故障(停电)而丢失

AOF

通过保存Redis服务器所执行的写命令来记录数据库状态。

有什么策略?三种

第一,appendfsync always,每一个操作(每一次写入命令)都会持久化到硬盘里,速度比较慢,性能比较差,效率低。但是最大的好处是不丢数据。 因为每次有数据修改发生时都会写入AOF文件,这样会严重降低Redis的速度

第二,appendfsync everysecond,每秒钟同步一次,显示地将多个写命令同步到硬盘 坏处:可能丢失一秒的数据,好处:每一秒同步一次将多个命令写入硬盘

第三,appendfsync no:让操作系统决定何时进行同步,让操作系统决定何时将缓存持久化

AOF的优点

数据的一致性和完整性更高

AOF的缺点

AOF记录的内容越多,文件越大,数据恢复变慢

RDB

RDB是通过保存数据库中的键值对来记录数据库的状态

RBD,就是把内存数据以快照形式保存到磁盘上。

默认的三种配置

save 900 1 #在900秒(15分钟)之后,如果至少有1个key发生变化,Redis就会自动触发BGSAVE命令创建快照。

save 300 10 #在300秒(5分钟)之后,如果至少有10个key发生变化,Redis就会自动触发BGSAVE命令创建快照。

save 60 10000 #在60秒(1分钟)之后,如果至少有10000个key发生变化,Redis就会自动触发BGSAVE命令创建快照

可以根据自己需求去改

两种触发策略:一种是手动触发,另一种是自动触发。

手动触发:

RBD的优点

适合大规模的数据恢复场景

RBD的缺点

没办法做到实时持久化/秒级持久化

新老版本存在RDB格式兼容问题

rbd 优点:访问性能最佳 缺点:数据不安全、fork消耗极大

aof 优点:数据相对安全 缺点:访问性能相对不在最佳

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值