Redis缓存实战教程
目录
1、引入pom依赖信息(将本工程所有的Redis统一放入service-util里)
2、写一个Redis的工具类(用来将Redis的池初始化到spring容器)
4、每隔引用工程引入service-util后,单独配置只能的redis的配置文件
Redis缓存
重点要讲的是另外一个层面:尽量避免直接查询数据库。
解决办法就是:缓存
缓存可以理解是数据库的一道保护伞,任何请求只要能在缓存中命中,都不会直接访问数据库。而缓存的处理性能是数据库10-100倍。
使用缓存Redis解决首页并发问题
- 用户第一次请求到redis
- 如果redis没有数据,redis会请求mysql
- mysql会把数据返回给用户,同时会传到redis上
- 第二次用户访问时,redis有数据,就不需要访问mysql。节省时间,降低消耗

1、缓存使用的简单设计

- 连接缓存
- 查询缓存
- 如果缓存没有,查询mysql
- mysql查询结果存入redis
2、Redis的整合步骤
A 将Redis整合到项目中(Redis+Spring)

B 设计一个数据存储策越
企业中的存储策越(核心是:如何设计k)
数据对象名:数据对象id:对象属性
User:123:password 用户ID为123的密码
User:123:userename 用户ID为123的名字
3、Redis的整合过程
1、引入pom依赖信息(将本工程所有的Redis统一放入service-util里)
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
创建两个类RedisConfig和RedisUtil
RedisConfig负责在spring容器启动时自动注入,而RedisUtil就是被注入的工具类以供其他模块调用。
2、写一个Redis的工具类(用来将Redis的池初始化到spring容器)
RedisUtil
public class RedisUtil {
private JedisPool jedisPool;
public void initPool(String host,int port ,int database){
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(200);
poolConfig.setMaxIdle(30);
poolConfig.setBlockWhenExhausted(true);
poolConfig.setMaxWaitMillis(10*1000);
poolConfig.setTestOnBorrow(true);
jedisPool=new JedisPool(poolConfig,host,port,20*1000);
}
public Jedis getJedis(){
Jedis jedis = jedisPool.getResource();
return jedis;
}
}
3、写一个spring整合Redis的配置类
将Redis的链接池创建到spring的容器中
RedisConfig
@Configuration
public class RedisConfig {
//读取配置文件中的redis的ip地址
@Value("${spring.redis.host:disabled}")
private String host;
@Value("${spring.redis.port:0}")
private int port;
@Value("${spring.redis.database:0}")
private int database;
@Bean
public RedisUtil getRedisUtil(){
if(host.equals("disabled")){
return null;
}
RedisUtil redisUtil=new RedisUtil();
redisUtil.initPool(host,port,database);
return redisUtil;
}
}
4、每隔引用工程引入service-util后,单独配置只能的redis的配置文件
Service-util的配置文件没有作用
同时,任何模块想要调用redis都必须在application.properties配置,否则不会进行注入
#Redis配置
//读取配置文件中的redis的ip地址
spring.redis.host=192.168.1.111
#Redis端口号
spring.redis.port=6379
#数据库
spring.redis.database=0
代码
这是从数据库调用mysql,查询数据
/**
* 从数据库调用
*
* @param skuId
* @return
*/
public PmsSkuInfo getSkuByIdFromDb(String skuId) {
//sku的商品对象
PmsSkuInfo pmsSkuInfo = new PmsSkuInfo();
pmsSkuInfo.setId(skuId);
PmsSkuInfo skuInfo = pmsSkuInfoMapper.selectOne(pmsSkuInfo);
try {
//sku的图片集合
PmsSkuImage pmsSkuImage = new PmsSkuImage();
List<PmsSkuImage> pmsSkuImages = pmsSkuImageMapper.select(pmsSkuImage);
skuInfo.setSkuImageList(pmsSkuImages);
} catch (Exception e) {
e.printStackTrace();
}
return skuInfo;
}
这个是Redis的代码,判断redis中是否有数据,
如果没有,就调用上面的代码,查询mysql数据库。返回结果,在写入redis数据库中。
如果有,直接调用redis数据库中的数据。
/**
* 商品详细图
* 主要是item前端的东西,调用此处的服务,方便
* 使用Redis缓存,解决高并发
*
* @param skuId
* @return
*/
@Override
public PmsSkuInfo getSkuById(String skuId) {
PmsSkuInfo pmsSkuInfo = new PmsSkuInfo();
//链接缓存
Jedis jedis = redisUtil.getJedis();
//查询缓存
String skuKey = "sky:" + skuId + ":info";
String skuJson = jedis.get("skuKey");
//可以吧json的字符串转换成jav的对象类
if (StringUtils.isNotBlank(skuJson)) {// if (skuJson!=null&&!skuJson.equals(""))
pmsSkuInfo = JSON.parseObject(skuJson, PmsSkuInfo.class);
} else {
//如果缓存没有,查询mysql
pmsSkuInfo = getSkuByIdFromDb(skuId);
if (pmsSkuInfo != null) {
//mysql查询结果存入redis
jedis.set("sku" + skuId + ":info", JSON.toJSONString(pmsSkuInfo));
}
}
jedis.close();
return pmsSkuInfo;
}
查询结果

查看Redis数据库的数据

Redis缓存实战教程的更多相关文章
- go语言实战教程:Redis实战项目应用
项目Redis配置 在实战项目中使用Redis功能,首先需要进行Redis配置.本实战项目中,关与Redis的配置项包含:连接类型.地址.端口.公共前缀.以上配置项被定义包含在Iris框架的redis ...
- SpringBoot微服务电商项目开发实战 --- Redis缓存雪崩、缓存穿透、缓存击穿防范
最近已经推出了好几篇SpringBoot+Dubbo+Redis+Kafka实现电商的文章,今天再次回到分布式微服务项目中来,在开始写今天的系列五文章之前,我先回顾下前面的内容. 系列(一):主要说了 ...
- .net使用CSRedis操作Redis缓存的简单笔记(新手教程)
0.介绍 .NET Core or .NET Framework 4.0+ client for Redis and Redis Sentinel (2.8) and Cluster. Include ...
- Canal 实战 | 第一篇:SpringBoot 整合 Canal + RabbitMQ 实现监听 MySQL 数据库同步更新 Redis 缓存
一. Canal 简介 canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同 ...
- Redis 缓存应用实战
为了提高系统吞吐量,我们经常在业务架构中引入缓存层. 缓存通常使用 Redis / Memcached 等高性能内存缓存来实现, 本文以 Redis 为例讨论缓存应用中面临的一些问题. 缓存更新一致性 ...
- ASP.NET Core教程:ASP.NET Core中使用Redis缓存
参考网址:https://www.cnblogs.com/dotnet261010/p/12033624.html 一.前言 我们这里以StackExchange.Redis为例,讲解如何在ASP.N ...
- spring boot 实战教程
二八法则 - get more with less Java.spring经过多年的发展,各种技术纷繁芜杂,初学者往往不知道该从何下手.其实开发技术的世界也符合二八法则,80%的场景中只有20%的技术 ...
- Windows下Redis缓存服务器的使用 .NET StackExchange.Redis Redis Desktop Manager
Redis缓存服务器是一款key/value数据库,读110000次/s,写81000次/s,因为是内存操作所以速度飞快,常见用法是存用户token.短信验证码等 官网显示Redis本身并没有Wind ...
- [个人翻译]Redis 集群教程(中)
上一篇:http://www.cnblogs.com/li-peng/p/6143709.html 官方原文地址:https://redis.io/topics/cluster-tutorial 水 ...
随机推荐
- ssh-agent,ssh-add 命令
centos 6.9 下测试: ssh-agent是一个密钥管理器,运行ssh-agent以后,使用ssh-add将私钥交给ssh-agent保管. eval `ssh-agent -s` ssh-a ...
- postman---postman文件夹介绍以及批量执行用例
我们在做测试的过程中,都会多次请求接口,都会把接口保存下来,方便下次直接请求,节省时间不用每次都重新输入,我们一起看下Postman如何保存接口会话 保存请求作用 Postman可以将各个请求组合保存 ...
- fiddler---Fiddler工具详细介绍
在做测试的过程中,遇到一些问题都会去进行抓包,抓包可以帮助我们解决很多问题,抓包工具有很多比如fiddler,浏览器调试工具(F12),charles等,抓包工具是我们测试人员必不可少的一项技能. 什 ...
- 【bzoj4559】[JLoi2016]成绩比较(dp+拉格朗日插值)
bzoj 题意: 有\(n\)位同学,\(m\)门课. 一位同学在第\(i\)门课上面获得的分数上限为\(u_i\). 定义同学\(A\)碾压同学\(B\)为每一课\(A\)同学的成绩都不低于\(B\ ...
- SQL必知必会|SQL基础篇
了解SQL DBMS的前世今生 SQL是如何执行的 DDL语法 关于外键的性能问题? 是否使用外键确实会有一些争议.关于外键的使用: 首先,外键本身是为了实现强一致性,所以如果需要正确性>性能的 ...
- day51_9_15_Django
一.pycharm接受网页信息原理. 如何实现在后端接受浏览器的数据,并解析出有用的信息呢? 使用socket编写网络连接,然后通过浏览器访问ip+端口号. import socket def ind ...
- 《CarbonData》
深度访谈:华为开源数据格式 CarbonData 项目,实现大数据即席查询秒级响应 Tina 阅读数:145842016 年 7 月 13 日 19:00 华为宣布开源了 CarbonDa ...
- 最短路问题的三种算法&模板
最短路算法&模板 最短路问题是图论的基础问题.本篇随笔就图论中最短路问题进行剖析,讲解常用的三种最短路算法:Floyd算法.Dijkstra算法及SPFA算法,并给出三种算法的模板.流畅阅读本 ...
- 详解C++ STL multiset 容器
详解C++ STL multiset 容器 本篇随笔简单介绍一下\(C++STL\)中\(multiset\)容器的使用方法及常见使用技巧. multiset容器的概念和性质 \(set\)在英文中的 ...
- SpringCloud微服务常见组件理解
概述 毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术.不过大多数讲解还停留在对Spring Cloud功能使用的层面,其底层的很多原理,很多人可能并不知晓 ...