我的编程空间,编程开发者的网络收藏夹
学习永远不晚

详解SpringBoot如何使用Redis和Redis缓存

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

详解SpringBoot如何使用Redis和Redis缓存

一、配置环境

首先,先创建一个SpringBoot项目,并且导入Redis依赖,使用Jedis进行连接测试。

本人的Redis装在虚拟机里,直接切换到虚拟机中的安装目录,启动redis服务,打开redis-cli,如果你设置了密码,还要先输入密码。

cd redis安装目录
#启动redis
redis-server  /etc/redis.conf
#进入redis 
redis-cli
#如果你设置了密码
auth 密码

在项目中,设置配置文件

# mysql数据库连接
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/redisdemo?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456
#返回json的全局时间格式
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
#配置mapper xml文件的路径
mybatis-plus.mapper-locations=classpath:com/rh/csdn_redis_demo/mapper/xml/*.xml
#mybatis日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#配置redis
spring.redis.host=你的redis地址
spring.redis.password=你的redis密码(没有直接空着,或者可以注掉这行)
spring.redis.port=6379
spring.redis.database= 0
spring.redis.timeout=1800000
spring.redis.lettuce.pool.max-active=20
spring.redis.lettuce.pool.max-wait=-1
#最大阻塞等待时间(负数表示没限制)
spring.redis.lettuce.pool.max-idle=5
spring.redis.lettuce.pool.min-idle=0

在test中写一个测试方法,测试是否能够连接,返回值为pong

        Jedis jedis = new Jedis("你的redis安装的ip地址",6379);
        //没有密码就注掉这行,不然会报错
        jedis.auth("你的redis密码");//设置密码

        String value = jedis.ping();

        System.out.println(value);

二、Redis的基本操作

首先,要写一个redisconfig的配置类,这个类是为了解决redis存取值的序列化问题和缓存问题。

@EnableCaching
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        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);
        template.setConnectionFactory(factory);
        //key序列化方式
        template.setKeySerializer(redisSerializer);
        //value序列化
        template.setValueSerializer(jackson2JsonRedisSerializer);
        //value hashmap序列化
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        return template;
    }

    @Bean
    public CacheManager cacheManager(RedisConnectionFactory factory) {
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        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);
        // 配置序列化(解决乱码的问题),过期时间600秒
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofSeconds(600))  //设置数据过期时间600秒
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
                .disableCachingNullValues();
        RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
                .cacheDefaults(config)
                .build();
        return cacheManager;
    }
}

定义一个controller,写一个测试方法,进行访问

@RestController
@RequestMapping("redisTest")
public class RedisTestController {

    @Autowired
    private RedisTemplate redisTemplate;

    @GetMapping("/test01")
    public void test01(){

        redisTemplate.opsForValue().set("test","redis存值测试");

        String test = (String) redisTemplate.opsForValue().get("test");

        System.out.println(test);

    }

}

在reids中也可以查询key与vaule(中文没有显示是shell的编码问题)。

SpringBoot中进行redis的操作基本都是借助于ops*,各位可以根据自己需求进行其他的选用。

三、使用redis作缓存

简单的用redis做一个缓存,这里使用@Cacheable在方法上作缓存。

写一个用于访问的test02方法,并在该方法上作缓存。

controller

@RestController
@RequestMapping("redisTest")
public class RedisTestController {

    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    private UserService userService;

    @GetMapping("/test01")
    public void test01(){

        redisTemplate.opsForValue().set("test","redis存值测试");

        String test = (String) redisTemplate.opsForValue().get("test");

        System.out.println(test);


    }

    @GetMapping("/test02")
    public List<User> test02(){

        List<User> userList = userService.test02();

        System.out.println(userList);

        return null;
    }
}

service

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {


    @Cacheable(value = "user",key = "'cache'")
    @Override
    public List<User> test02() {

        List<User> userList = baseMapper.selectList(null);

        return userList;
    }
}

首先查看redis中缓存内容

然后调用方法

可以看到,这一次查询,由于redis中没有缓存,所以对数据库进行了访问,再次查看redis中key

可以看到redis中多出了user::cache这个键,这个就是我们做的缓存了(编码格式问题导致这么显示)

这个时候我们再次访问方法

可以看到,第二次调用方法,并没有连接数据库,没有操作数据库的语句,这表示我们成功的从缓存中取出了数据。

tpis.

如果你在连接redis的时候出现了MISCONF Redis is configured to save RDB snapshots……这样的错误提示,这表示redis的持久化失效了,可以再redis-cli中直接输入config set stop-writes-on-bgsave-error no,但是这种方法不能永远解决这个问题,如果需要永解决这个问题,可以搜索redis持久化失效的解决方法。

以上就是详解SpringBoot如何使用Redis和Redis缓存的详细内容,更多关于SpringBoot使用Redis 缓存的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

详解SpringBoot如何使用Redis和Redis缓存

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Redis和本地缓存如何使用

今天小编给大家分享一下Redis和本地缓存如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。众所周知,缓存最主要的目的就
2023-07-04

SpringBoot中怎么使用Redis做缓存

在SpringBoot中使用Redis做缓存可以通过以下步骤实现:添加依赖:首先在pom.xml文件中添加Spring Data Redis的依赖,如下所示:org.springframework.
SpringBoot中怎么使用Redis做缓存
2024-04-09

java如何使用redis做缓存

使用Redis在Java中实现缓存,可以提升应用程序性能和可伸缩性。步骤包括:引入Redis客户端库。创建Redis连接。设置缓存,使用set命令。获取缓存,使用get命令。设置过期时间,使用expire命令。检查缓存存在,使用exists命令。删除缓存,使用del命令。刷新缓存,使用flushDB命令。最佳实践建议:使用不同的缓存键前缀。设置适当的过期时间。使用批量操作。监控缓存。处理缓存丢失。
java如何使用redis做缓存
2024-04-02

如何使用redis开启缓存

要使用Redis开启缓存,首先需要安装Redis并配置好相关参数。以下是一些基本步骤:1. 安装Redis:根据你的操作系统,选择合适的Redis安装方式,并将其安装到你的机器上。可以从Redis官网下载安装包,或使用包管理工具进行安装。2
2023-08-23

java中如何使用redis缓存

本文详细介绍了在Java中使用Redis缓存,包括引入依赖、连接到Redis、设置和获取缓存、以及过期键、缓存击穿、缓存雪崩等高级功能。此外,文章还提供了使用Redis缓存的最佳实践,例如仅缓存经常访问的数据、设置适当的过期时间、监控缓存命中率和延迟等,为读者提供了全面的Java中使用Redis缓存的指南。
java中如何使用redis缓存
2024-04-02

SpringBoot使用Redis实现分布式缓存

这篇文章主要介绍了SpringBootredis分布式缓存实现过程解析,文中通过示例代码解析的非常详细,感兴趣的同学可以参考阅读
2023-05-14

laravel redis缓存如何用

这篇文章主要介绍“laravel redis缓存如何用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“laravel redis缓存如何用”文章能帮助大家解决问题。第一步:安装Redis首先,需要在服
2023-07-06

springboot+mybatis+redis 二级缓存问题实例详解

前言什么是mybatis二级缓存?二级缓存是多个sqlsession共享的,其作用域是mapper的同一个namespace。即,在不同的sqlsession中,相同的namespace下,相同的sql语句,并且sql模板中参数也相同的,会
2023-05-30

Java中如何使用Redis做缓存

Redis作为一种高效键值存储数据库,可用于Java中的缓存。第三方库如Jedis和Redisson提供便捷的API。设置缓存涉及选择数据结构、过期时间、处理未命中等方面。最佳实践包括避免存储大型对象、设置合适过期时间、监控缓存,并考虑使用分布式缓存解决方案以应对高流量。
Java中如何使用Redis做缓存
2024-04-02

详解redis与spring的整合(使用缓存)

1、实现目标通过redis缓存数据。(目的不是加快查询的速度,而是减少数据库的负担)  2、所需jar包注意:jdies和commons-pool两个jar的版本是有对应关系的,注意引入jar包是要配对使用,否则将会报错。因为commons
2023-05-31

Laravel操作redis和缓存操作详解

这篇文章主要为大家详细介绍了Laravel操作redis和缓存操作的相关知识,文中的示例代码讲解详细,具有一定的学习和借鉴价值,感兴趣的小伙伴可以跟随小编一起学习游戏
2023-02-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录