高并发系列之——缓存中间件Redis
2024-09-28 04:28:08
1 概念和使用场景
2 基本存储类型
- String
- List
- Set
- SortedSet
- Hash
3 事务
单线程执行,即只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令。
根据事务的四大特性ACID,只保证了原子性、一致性和隔离性
4 如何实现mybatis的二级缓存
步骤一:新建一个类,用于实现org.apache.ibatis.cache.Cache接口
步骤二:在mapper.xml中开启基于redis二级缓存
<cache type=“com.wooyoo.learning.util.RedisCache”/>
步骤三:sql语句中增加标签如,flushCache=true
4.1 二级缓存目的
取数据时,首先从一级缓存中取,其次葱二级缓存中,如果二级缓存中有数据,则从二级缓存中取,否则查询数据库。
删除、更新、增加数据的时候,同时更新缓存。
4.2 什么数据适合存放到二级缓存中
- 很少被改动;
- 数据不是很重要,容许出现偶尔的并发数据;
- 不会被并发访问;
5 扩展
5.1 缓存穿透
查询缓存中不存在的数据,导致直接查询到数据库。
解决方案:第一次查询不存在的数据时,在缓存中增加一个对应的key为空的数据。
5.2 缓存雪崩
所有缓存在同一时间全部失效,导致了所有请求都直接访问数据库。
解决方案:设置线程互斥,只让一个线程构建缓存,其他等待缓存创建完成后再通过缓存取数据。或,设置交错失效时间
5.3 缓存击穿
缓存雪崩的一个特例,不同的是缓存雪崩针对全部数据,缓存击穿是特定的热点数据。
缓存方案:二级缓存
最新文章
- C# 文件/文件夹重命名
- ABP dynamic API
- javascript中的克隆
- PHP常用库函数
- REST及RESTful的实现
- e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (一) 京东 商品搜索
- mac 软件安装
- 替换SQL Server数据库中所有表的所有字段的某些内容
- 怎样在Win7 64位旗舰版安装Python+Eclipse开发环境
- [原创]抢先DriverStudio夺取机器控制权(上篇)
- 【Python之路】第一篇--Linux基础命令
- android 按钮Button单击背景切换
- Python3基础 当函数中的局部变量与全局变量同名了,各管各的
- MySQL DNS反查导致连接缓慢
- [翻译] Tensorflow中name scope和variable scope的区别是什么
- C语言多维数组的指针传递
- spring mvc 在上传图片时,浏览器报The request sent by the client was syntactically incorrect
- Geometric regularity criterion for NSE: the cross product of velocity and vorticity 2: $u\times \om\cdot \n\times \om$
- elementUI vue table 操作选项中弹出框确定dialog
- python实现链表(一)
热门文章
- python redis 方法大全
- 报错 POST http://192.168.79.165:8015/marketing/manager 400 (BAD REQUEST) 解决办法
- Linux下的压缩及归档
- 【Hadoop &; Ecilpse】Exception in thread ";main"; org.apache.hadoop.security.AccessControlException: Permission denied: user=bruce, access=WRITE, inode=";/out2/_temporary/0";:atguigu:supergroup:drwxr-xr-x
- OO第二单元の小结
- keycloak ssl-required报错问题处理
- mysql使用常见问题
- Formatting HDFS
- Linux下的Shell特殊符号大全(转)
- Linux 下使用yum 命令安装MySQL