Redis基础总结

Redis是一个基于内存的键值数据库,常用于缓存。

1、数据结构

常见的有:

string,可以存字符串、整数等,如 key: "sadasfa"

hash, 存一张哈希表, 如 key : {{k1, v1}, {k2, v2}}

list,存一个链表,如 key:{1->2->3}

set, 存一个字符串的无序集合,去重 如key: {"123", "213"}

zset,存储有序的键值对,每个元素有权重和值,根据权重排序,如key:{{A, 1}, {B, 2}, {C, 3}}

使用场景:

string记录一些信息,如计数

list:消息队列

hash:用户信息,HSET user:1000 name "John Doe"

set:去重,如查找我们2个人的所有好友

zset:有序,打赏排行榜, 按打赏的金额排序

redis为什么快

1、大部分操作在内存中完成,并且采用高效的数据结构,所以redis的瓶颈是内存和网络带宽,不是cpu,自然就采用单线程,避免多线程竞争。

2、采用I/O多路复用,提高并发。

3、6.0对于网络io的处理改成了多线程。但是对命令的执行还是单线程的。

持久化

redis持久化:三种方式

  1. AOF日志:每执行一条写命令后都会把它记录到AOF缓冲区,按写回策略写回磁盘。
    后续可以根据AOF日志进行数据恢复。写回策略:总是,每秒,由操作系统决定。A0F恢复是逐条恢复,比较慢,但是全。
  2. RDB快照:定期照一张快照,记录内存的所有数据,再写回磁盘,后续根据快照恢复。RDB很快因为直接是根据数据恢复,但不能太频繁,因为每次快照写回磁盘数据量比较大。所以RDB会有数据安全的问题。
  3. 混合持久化:AOF日志前半部分记录RDB的全量数据,后半部分记录AOF的增量,这样的化,重启redis后加载快,且数据丢失也较少。

高可用

主从复制:一主多从,从机备份主机数据,主机负责写,从机负责读,实现读写分离。但是

但是若主机挂了系统就只能读不能写了。所以需要能够自动重选出主机:引入哨兵,监控主机的运行情况,若主机挂了,他会选一个从机成为主机,具体过程:哨兵会定期发送ping判断主机是否正常运行,若ping失败则认为主机主观下线。则哨兵会向其他从机发出投票命令,让他们判断主机是否下线,当票数达到阈值则认为主机客观下线。开始重选主机:所有从机按优先级、复制进度、ID号排序,选出新的主机,到此故障迁移完成。注意哨兵本身也应该设置多个形成哨兵集群。但是从主机故障到哨兵发生故障进行故障迁移需要时间,这段时间还是不能写,所以让主机也形成集群,一个挂了也不影响。

redis集群保证数据一致性吗:他是AP,保证可用性和分区容错性,数据一致性并不全保证。

缓存雪崩 :为了保证缓存中的数据和数据库数据的一致性,缓存的数据会设置过期时间,当数据过期,就要访问数据库重新生成缓存。若大量缓存数据同时过期,同时又来了大量请求,就会全访问数据库,导致数据库压力骤增甚至崩溃。可均匀设置过期时间。或者像数据库构建缓存时加锁,保证同一时间只有一个线程构建缓存。
缓存击穿 :某个热点数据过期了,同时大量数据访问该热点数据,也会直接访问数据库。可以不给热点数据设置过期时间,我们后台更新缓存。
缓存穿透:用户访问的数据既不在缓存,也不在数据库,大量的这种请求也会导致数据库压力骤增。这一般是恶意访问,可以限制非法请求,或者没查到的数据缓存空值,后续也不用再查数据库了。

数据库和缓存如何保证一致性:读的时候先读缓存,缓存若没有就读数据库,并把数据放入缓存;写的时候先更新数据库再删除缓存。为啥是删除缓存不是更新缓存:因为更新的代价比较大,一个缓存可能设计多张表,而且这个缓存也不一定会被频繁访问到。这也是叫懒加载的思想,用到的时候再计算。

相关推荐
Elastic 中国社区官方博客4 分钟前
Elasticsearch 开放推理 API 增加了对 IBM watsonx.ai Slate 嵌入模型的支持
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
企鹅侠客8 分钟前
ETCD调优
数据库·etcd
Json_1817901448014 分钟前
电商拍立淘按图搜索API接口系列,文档说明参考
前端·数据库
煎饼小狗26 分钟前
Redis五大基本类型——Zset有序集合命令详解(命令用法详解+思维导图详解)
数据库·redis·缓存
永乐春秋43 分钟前
WEB-通用漏洞&SQL注入&CTF&二次&堆叠&DNS带外
数据库·sql
打鱼又晒网1 小时前
【MySQL】数据库精细化讲解:内置函数知识穿透与深度学习解析
数据库·mysql
大白要努力!1 小时前
android 使用SQLiteOpenHelper 如何优化数据库的性能
android·数据库·oracle
tatasix2 小时前
MySQL UPDATE语句执行链路解析
数据库·mysql
秋意钟2 小时前
缓存雪崩、缓存穿透【Redis】
redis
南城花随雪。2 小时前
硬盘(HDD)与固态硬盘(SSD)详细解读
数据库