ideal整合reids实现缓存查询

article/2024/4/20 16:17:46

目录

前言:

一.工作流程

二. RedisConfig类

 三.application.properties

四.开启linux中的redis

五.使用redis结合数据库进行数据查询

5.1编程式缓存

 5.2声明式缓存

5.2.1在启动类上添加注解

5.2.2实现代码

六.运行结果

 ​编辑


前言:

废话不多讲,redis的安装,redis中的数据结构及介绍就不讲了。本篇只讲解,redis结合ideal实现缓存查询

一.工作流程

二. RedisConfig类

package com.dmdd.java13redis.config;import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@EnableCaching
@Configuration
public class RedisConfig {//向IOC容器提供一个Redis操作对象,配置键和值的序列化@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {//创建Redis模板对象RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();//设置连接template.setConnectionFactory(factory);// 配置JSON序列化器Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);// 配置字符串序列化器StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();// key采用String的序列化方式template.setKeySerializer(stringRedisSerializer);// hash的key也采用String的序列化方式template.setHashKeySerializer(stringRedisSerializer);// value序列化方式采用jacksontemplate.setValueSerializer(jackson2JsonRedisSerializer);// hash的value序列化方式采用jackson序列化器template.setHashValueSerializer(jackson2JsonRedisSerializer);// 完成配置template.afterPropertiesSet();return template;}//配置声明式缓存@Beanpublic RedisCacheConfiguration provideRedisCacheConfiguration(){//加载默认配置RedisCacheConfiguration conf = RedisCacheConfiguration.defaultCacheConfig();//返回Jackson序列化器return conf.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));}
}

主要实现Redis中键和值的序列化 

 三.application.properties

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/edu_user?serverTimezone=UTC&useUnicode=true&useSSL=false&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=jly720609mybatis-plus.type-aliases-package=com.dmdd.java13redis.entity
mybatis-plus.mapper-locations=classpath:mapper/*.xmlspring.redis.host=192.168.56.188
spring.redis.port=6379
spring.redis.database=0
spring.redis.jedis.pool.max-active=100
spring.redis.jedis.pool.max-wait=100ms
spring.redis.jedis.pool.max-idle=100
spring.redis.jedis.pool.min-idle=10
redis.host的ip是linux虚拟机的ip,redis的默认端口是6379,其他的配置就不讲解了,懂得都懂。

四.开启linux中的redis

1.进入redis下的src目录 

 2.输入 ./redis-server ../redis.conf

五.使用redis结合数据库进行数据查询

5.1编程式缓存

package com.dmdd.java13redis.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dmdd.java13redis.entity.User;
import com.dmdd.java13redis.mapper.UserMapper;
import com.dmdd.java13redis.service.IUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;
/*** <p>*  服务实现类* </p>** @author xray* @since 2023-01-31*/
@Slf4j
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {private static  final String KEY="User-";@Autowiredprivate RedisTemplate<String,Object>  redisTemplate;@Overridepublic User getUserById(Long id) {//获得String类型的操作对象ValueOperations<String, Object> ops = redisTemplate.opsForValue();//查询redis中的用户User user = (User) ops.get(KEY + id);//如果Redis中不存在if (user==null){log.info("在redis中找不到");//在数据中查找user = this.getById(id);if (user!=null){log.info("在数据库中存在,保存到redis中 id为"+id);ops.set(KEY+id,user);//返回给服务器return user;}}//redis中存在else {log.info("redis中存在,返回该对象 id为"+id);return user;}return null;}
//    @Cacheable(cacheNames = "User",key = "T(String).valueOf(#id)")
//    @Override
//    public User getUserById(Long id) {
//        return this.getById(id);
//    }
}

 第一种查询写法是编程式缓存遵循以下流程执行

  1. 先查询缓存

  2. 如果查到直接返回

  3. 如果查不到,查询数据库

  4. 数据库查到,保存缓存中

  5. 数据库查不到返回null 

编程式缓存使用复杂,代码侵入性高,推荐使用声明式缓存,通过注解来实现热点数据缓存。

 5.2声明式缓存

5.2.1在启动类上添加注解

//启动缓存
@EnableCaching

5.2.2实现代码

@Cacheable(cacheNames = "User",key = "T(String).valueOf(#id)")@Overridepublic User getUserById(Long id) {return this.getById(id);}

更加方便简单

六.运行结果

 


http://www.ngui.cc/article/show-861346.html

相关文章

JAVA02_02学习总结(Spring开启事务,Spring通知和curd数据库)

今日内容 1. SpringAOP和数据库进行curd操作 SpringAOPSpring核心技术之一对数据库进行curd操作时,进行增强 思想增强数据库的curd业务,将SpringAOP技术整合进去,为后面的Spring方式控制事务做准备 需要准备的依赖包mybatismysql驱动spring-context依赖包druid连接池-德…

Word处理控件Aspose.Words功能演示:使用 C++ 处理 Word 文档中的目录

Aspose API支持流行文件格式处理&#xff0c;并允许将各类文档导出或转换为固定布局文件格式和最常用的图像/多媒体格式。 Aspose.words是一种高级Word文档处理API&#xff0c;用于执行各种文档管理和操作任务。API支持生成&#xff0c;修改&#xff0c;转换&#xff0c;呈现和…

软件测试真的可以达到月薪20k+?不会自动化测试的我真的很难....

做自动化测试后悔吗&#xff1f; 后悔&#xff0c;真的后悔&#xff01; 后悔没有早点学..... 虽然现在网上到处都在散播35的焦虑&#xff0c;姑且信之&#xff0c;那么反问你&#xff0c;如果你30岁了&#xff0c;那么给你5年&#xff0c;能够在某个领域成为专家呢&#xf…

Oracle的启动与关闭

启动oracle 启动数据库实例&#xff0c;分为两步&#xff1a;第一步&#xff0c;启动监听&#xff1b;第二步&#xff0c;启动数据库实例。 一、如何启动数据库实例 1.进入到sqlplus启动实例 –“切换到oracle用户” su - oracle –“打开监听” lsnrctl start –“进入到sql…

Python 初学者进阶的九大技能

Python是一种很棒的语言&#xff0c;语法简单&#xff0c;无需在代码中搜索分号。对于初学者来说&#xff0c;Python是入门最简单的语言之一。 Python有大量的库支持&#xff0c;你还可以安装其他库来增加自己的编程经验。 学了一阵子之后&#xff0c;你可能会觉得&#xff1…

同台服务器上部署多个Mysql数据库

1、新建数据库 将已安装好的5.7版本库文件夹复制一份&#xff0c;文件夹改为5.8&#xff0c;只为区分文件&#xff0c;与版本无关&#xff0c;名字自定义即可。 2、创建服务&#xff1a; 管理员身份cmd进入C:\Program Files\MySQL\MySQL Server 5.8\bin路径&#xff0c;输入my…

1月的碎碎念,但是很有必要

从今年开始每个月会整理一个我生活的琐碎但觉得有必要的事&#xff0c;一来方便年底回顾&#xff0c;二来也希望这些事情对大家有也有些参考。 不高大上&#xff0c;但是希望某一天再看到的时候会觉得充满趣味。1.新的1年的1月开始了&#xff0c;想了很多计划&#xff0c;搬新办…

springboot引入redis

在接口中添加redis缓存 由于首页数据变化不是很频繁&#xff0c;而且首页访问量相对较大&#xff0c;所以我们有必要把首页接口数据缓存到redis缓存中&#xff0c;减少数据库压力和提高访问速度。 改造service-cms模块首页banner接口&#xff0c;首页课程与讲师接口类似 3.1 Sp…

关于模板字面量,我有点好奇它的内部结构

前言 最近翻看源码的时候&#xff0c;发现一些有趣的 JS 的知识点&#xff0c;基于日常的开发经验&#xff0c;我做了一些联想和对比。整个过程充满了乐趣。 于是我想&#xff0c;是不是可以延续这种创意带来的学习的乐趣。 带的富含创造力夜晚的 buff&#xff0c;确实让我拥…

袁树雄和杨语莲究竟什么关系 ,《早安隆回》走红后又是《汉川》

自从《早安隆回》火爆全网后&#xff0c;歌迷们就有一种担心&#xff0c;不知道这首好听的歌曲&#xff0c;究竟还能再够火爆多久。歌迷们的担心也不无道理&#xff0c;毕竟花无百日红&#xff0c;人无千般好&#xff0c;《早安隆回》就是再好听&#xff0c;也不可能红一辈子吧…