数据库
首页 > 数据库> > Redis基础

Redis基础

作者:互联网

常见缓存数据库

Redis数据类型及常用场景

Redis高级特性

持久化方式

redis事务

原子性不支持回滚, 一致性有watch实现, 隔离性本身就是单线程,持久性不支持

go实现

使用 TxPipeline 或 TxPipelined 方法将 pipeline 命令使用 MULTIEXEC包裹起来

Pipeline

将多个命令放入pipeline打包发送给sever,节省网络往返时间

分布式锁

为什么要分布式锁

锁住 uid,防止重复下单。

锁住库存,防止超卖。

锁住账户,防止并发操作。

分布式系统中共享同一个资源时往往需要分布式锁来保证变更资源一致性。

特性

锁的基本特性,并且只能被第一个持有者持有。

高并发场景下临界资源一旦发生死锁非常难以排查,通常可以通过设置超时时间到期自动释放锁来规避。

锁持有者支持可重入,防止锁持有者再次重入时锁被超时释放。

锁是代码运行的关键前置节点,一旦不可用则业务直接就报故障了。高并发场景下,高性能高可用是基本要求。

实现

常用的缓存使用模式

cache aside

先更新数据库-->删除缓存,下次读取无缓存时重建缓存

Read/Write Through

先更新缓存,缓存负责同步更新数据库

Write Behind Caching

先更新缓存,缓存负责定期异步更新数据库

缓存坑

缓存穿透

起因:大量缓存查不到,数据库中也没有

解决:将返回NULL的也存到缓存,插入数据的时候删除NULL缓存(或者设置短的超时时间,)

缓存击穿

起因:热点数据key过期,大量请求数据库

解决(两种):

​ 分布式锁:一个线程获取锁查数据库更新缓存,其他线程等待,直到缓存中存在了,直接取

​ 异步后台更新:异步对过期key自动刷新

缓存雪崩

起因:缓存服务不可用,或者大量key同时失效,大量请求数据库

解决:

​ 针对缓存服务不可用---架构层的监控报警完善

​ 针对大量key同时失效---key随机超时或多级缓存(不同级别的key不用的超时时间)

标签:缓存,Redis,数据库,基础,key,超时,命令集,分布式
来源: https://www.cnblogs.com/aleiyoy/p/16624665.html