高并发系列之——缓存中间件Redis
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 缓存击穿
缓存雪崩的一个特例,不同的是缓存雪崩针对全部数据,缓存击穿是特定的热点数据。
缓存方案:二级缓存
高并发系列之——缓存中间件Redis的更多相关文章
- 老司机带你玩转面试(1):缓存中间件 Redis 基础知识以及数据持久化
引言 今天周末,我在家坐着掐指一算,马上又要到一年一度的金九银十招聘季了,国内今年上半年受到 YQ 冲击,金三银四泡汤了,这就直接导致很多今年毕业的同学会和明年毕业的同学一起参加今年下半年的秋招,这个 ...
- Java高并发系列——检视阅读
Java高并发系列--检视阅读 参考 java高并发系列 liaoxuefeng Java教程 CompletableFuture AQS原理没讲,需要找资料补充. JUC中常见的集合原来没讲,比如C ...
- java高并发系列 - 第7天:volatile与Java内存模型
public class Demo09 { public static boolean flag = true; public static class T1 extends Thread { pub ...
- Java高并发--CPU多级缓存与Java内存模型
Java高并发--CPU多级缓存与Java内存模型 主要是学习慕课网实战视频<Java并发编程入门与高并发面试>的笔记 CPU多级缓存 为什么需要CPU缓存:CPU的频率太快,以至于主存跟 ...
- java高并发系列-第1天:必须知道的几个概念
java高并发系列-第1天:必须知道的几个概念 同步(Synchronous)和异步(Asynchronous) 同步和异步通常来形容一次方法调用,同步方法调用一旦开始,调用者必须等到方法调用返回后, ...
- java高并发系列 - 第6天:线程的基本操作
新建线程 新建线程很简单.只需要使用new关键字创建一个线程对象,然后调用它的start()启动线程即可. Thread thread1 = new Thread1(); t1.start(); 那么 ...
- java高并发系列 - 第12天JUC:ReentrantLock重入锁
java高并发系列 - 第12天JUC:ReentrantLock重入锁 本篇文章开始将juc中常用的一些类,估计会有十来篇. synchronized的局限性 synchronized是java内置 ...
- java高并发系列 - 第14天:JUC中的LockSupport工具类,必备技能
这是java高并发系列第14篇文章. 本文主要内容: 讲解3种让线程等待和唤醒的方法,每种方法配合具体的示例 介绍LockSupport主要用法 对比3种方式,了解他们之间的区别 LockSuppor ...
- java高并发系列 - 第15天:JUC中的Semaphore,最简单的限流工具类,必备技能
这是java高并发系列第15篇文章 Semaphore(信号量)为多线程协作提供了更为强大的控制方法,前面的文章中我们学了synchronized和重入锁ReentrantLock,这2种锁一次都只能 ...
随机推荐
- 【12c OCP】CUUG OCP认证071考试原题解析(34)
34.choose two View the Exhibit and examine the structure of the PRODUCT_INFORMATION and INVENTORIES ...
- DBHelper--Java JDBC SSH 连接数据库工具类
概述 JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库. ----------------------------- ...
- centos和ubuntu的网络属性配置
一. centos的网络配置 1. 修改 /etc/sysconfig/network-scripts/ifcfg-IFACE: DEVICE:此配置文件应用到 ...
- iOS学习笔记(7)——解析json中的中文
NSURL *url = [NSURL URLWithString:@"http://nycode.sinaapp.com/d.php"]; NSError *error = ni ...
- 架构师养成记--16.disruptor并发框架中RingBuffer的使用
很多时候我们只需要消息中间件这样的功能,那么直需要RinBuffer就可以了. 入口: import java.util.concurrent.Callable; import java.util.c ...
- 2016级算法期末模拟练习赛-D.AlvinZH的序列问题
1111 AlvinZH的序列问题 思路 中等题,动态规划. 简化题意,. 坑点一:二维int数组MLE,明显会超过内存限制,由于\(n\)最大为1e4,那么我们的dp数组最大也是1e4,考虑使用sh ...
- FCN详解
转载自:https://www.cnblogs.com/gujianhan/p/6030639.html 论文地址:https://arxiv.org/pdf/1411.4038v1.pdf 背景 C ...
- 遇见Navicat 2003-can't connect to MYSQL server on 'localhost'(10061)
学习过程中难免遇到问题,今天就遇到了Navicat 2003-can't connect to MYSQL server on 'localhost'(10061),navicat报错,我就纳闷以前都 ...
- GeneXus学习笔记——入门篇
使用GeneXus做开发做了有一段时间了 却发现一个问题(O_O)?就是除了相关的Wiki外 网上其他地方的相关资料都很少 于是乎我就想在这记录一些东西 来帮助以后会用到的人(°ー°") 那 ...
- PHP 导入数据库 sql 文件
使用PHP 可以导入sql来建立数据库.代码如下: <?php $hostname = 'localhost'; $dbname = 'test'; $username = 'root'; $p ...