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,保证可用性和分区容错性,数据一致性并不全保证。

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

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

相关推荐
ClouGence31 分钟前
SQL 效率天花板!开源 CloudDM,自带一站式 AI SQL 助手
数据库·sql·开源
Decay__43 分钟前
附-01 · MySQL 压测与容量规划 —— sysbench 基准测试、容量评估与参数基线
运维·数据库·sql·mysql·架构
这个DBA有点耶1 小时前
主从切换报成功,业务却写不进去——数据层脑裂与应用层连接残留的两类假成功
数据库·架构·dba
qq_452396231 小时前
第八篇:《VACUUM、自动清理与膨胀治理》
jvm·数据库·oracle
光依旧1 小时前
多实例治理一致性深潜:Redis与本地缓存降级(MCP实战手记·篇12 延伸)
redis·caffeine·高可用·缓存一致性·mcp·多实例
SelectDB技术团队1 小时前
ClickHouse 支持存算分离吗?Doris 社区版原生存算分离怎么落地
数据库·clickhouse·云原生·开源·apache doris·技术选型·存算分层
DBA_G1 小时前
南大通用GBase 8a数据库可视化灾备解决工具GVR
数据库
l1t1 小时前
DeepSeek总结的PostgreSQL 中的 SQL 与 PL/pgSQL:计划缓存
sql·缓存·postgresql
JJJennie7772 小时前
MAI Gateway实战部署:大模型网关部署方案?从0到1上手指南
数据库·人工智能·gateway·ai网关
吹什么轩2 小时前
MySQL 内连接与外连接:从笛卡尔积到 LEFT JOIN,一篇讲透
数据库·mysql