广告
返回顶部
首页 > 资讯 > 精选 >Redis缓存实例代码分析
  • 151
分享到

Redis缓存实例代码分析

2023-07-05 20:07:10 151人浏览 泡泡鱼
摘要

这篇文章主要介绍“Redis缓存实例代码分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Redis缓存实例代码分析”文章能帮助大家解决问题。一、简介1、场景由于数据字典的变化不是很频繁,而且系统对

这篇文章主要介绍“Redis缓存实例代码分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Redis缓存实例代码分析”文章能帮助大家解决问题。

一、简介

1、场景

由于数据字典的变化不是很频繁,而且系统对数据字典的访问较频繁,所以我们有必要把数据字典的数据存入缓存,减少数据库压力和提高访问速度。这里,我们使用Redis作为系统的分布式缓存中间件

2、RedisTemplate

Spring Boot项目中中,默认集成spring Data Redis,Spring Data Redis针对Redis提供了非常方便的操作模版RedisTemplate,并且可以进行连接池自动管理。

二、引入Redis

1、项目中集成Redis

service-base模块中添加redis依赖,Spring Boot 2.0以上默认通过commons-pool2连接池连接Redis

<!-- spring boot redis缓存引入 --><dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- 缓存连接池--><dependency>    <groupId>org.apache.commons</groupId>    <artifactId>commons-pool2</artifactId></dependency><!-- redis 存储 JSON序列化 --><dependency>    <groupId>com.fasterxml.jackson.core</groupId>    <artifactId>jackson-databind</artifactId></dependency><dependency>    <groupId>com.fasterxml.jackson.datatype</groupId>    <artifactId>jackson-datatype-jsr310</artifactId></dependency>

2、添加Redis连接配置

service-core的 application.yml 中添加如下配置

#spring: 
  redis:
    host: 192.168.100.100
    port: 6379
    database: 0
    passWord: 123456 #默认为空
    timeout: 3000ms #最大等待时间,超时则抛出异常,否则请求一直等待
    lettuce:
      pool:
        max-active: 20  #最大连接数,负值表示没有限制,默认8
        max-wait: -1    #最大阻塞等待时间,负值表示没限制,默认-1
        max-idle: 8     #最大空闲连接,默认8
        min-idle: 0     #最小空闲连接,默认0

3、启动Redis服务

远程连接linux服务器,这里本地使用Centos虚拟机上的redis

#启动服务
cd /usr/local/redis-5.0.7
bin/redis-server redis.conf

三、测试RedisTemplate

1、存值测试

test中创建测试类RedisTemplateTests

@SpringBootTest@RunWith(SpringRunner.class)public class RedisTemplateTests {    @Resource    private RedisTemplate redisTemplate;    @Resource    private DictMapper dictMapper;    @Test    public void saveDict(){        Dict dict = dictMapper.selectById(1);        //向数据库中存储string类型的键值对, 过期时间5分钟        redisTemplate.opsForValue().set("dict", dict, 5, TimeUnit.MINUTES);    }}

发现RedisTemplate默认使用了jdk的序列化方式存储了key和value,可读性差

Redis缓存实例代码分析

2、Redis配置文件

service-base中添加RedisConfig,我们可以在这个配置文件中配置Redis序列化方案

@Configurationpublic class RedisConfig {    @Bean    public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory redisConnectionFactory) {        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();        redisTemplate.setConnectionFactory(redisConnectionFactory);        //首先解决key的序列化方式        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();        redisTemplate.seTKEySerializer(stringRedisSerializer);        //解决value的序列化方式        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);        //序列化时将类的数据类型存入json,以便反序列化的时候转换成正确的类型        ObjectMapper objectMapper = new ObjectMapper();        //objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);        objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);        // 解决jackson2无法反序列化LocalDateTime的问题        objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);        objectMapper.reGISterModule(new JavaTimeModule());        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);        return redisTemplate;    }}

再次测试,key使用了字符串存储,value使用了json存储

Redis缓存实例代码分析

3、取值测试

@Testpublic void getDict(){    Dict dict = (Dict)redisTemplate.opsForValue().get("dict");    System.out.println(dict);}

四、将数据字典存入redis

DictServiceImpl

注意:当redis服务器宕机时,我们不要抛出异常,要正常的执行后面的流程,使业务可以正常的运行

@Resourceprivate RedisTemplate redisTemplate;@Overridepublic List<Dict> listByParentId(Long parentId) {    //先查询redis中是否存在数据列表    List<Dict> dictList = null;    try {        dictList = (List<Dict>)redisTemplate.opsForValue().get("srb:core:dictList:" + parentId);        if(dictList != null){            log.info("从redis中取值");            return dictList;        }    } catch (Exception e) {        log.error("redis服务器异常:" + ExceptionUtils.getStackTrace(e));//此处不抛出异常,继续执行后面的代码    }    log.info("从数据库中取值");    dictList = baseMapper.selectList(new QueryWrapper<Dict>().eq("parent_id", parentId));    dictList.forEach(dict -> {        //如果有子节点,则是非叶子节点        boolean hasChildren = this.hasChildren(dict.getId());        dict.setHasChildren(hasChildren);    });    //将数据存入redis    try {        redisTemplate.opsForValue().set("srb:core:dictList:" + parentId, dictList, 5, TimeUnit.MINUTES);        log.info("数据存入redis");    } catch (Exception e) {        log.error("redis服务器异常:" + ExceptionUtils.getStackTrace(e));//此处不抛出异常,继续执行后面的代码    }    return dictList;}

集成redis总结

(1)导入相关依赖;

(2)配置redis连接信息;

(3)测试连接,取值测试,存值测试;

(4)根据自己的需要配置序列化器,否则默认使用jdk的序列化器。

redis业务总结:

(1)首先查询redis中有无对应的缓存信息,有的话取出直接返回,没有执行(2),如果redis因为某种原因连接不上比如宕机,此时打印错误日志,继续查询数据库;

(2)没有的话查询数据库,将数据存放进redis并返回数据。

关于“Redis缓存实例代码分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: Redis缓存实例代码分析

本文链接: https://www.lsjlt.com/news/355320.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Redis缓存实例代码分析
    这篇文章主要介绍“Redis缓存实例代码分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Redis缓存实例代码分析”文章能帮助大家解决问题。一、简介1、场景由于数据字典的变化不是很频繁,而且系统对...
    99+
    2023-07-05
  • Redis缓存问题的示例分析
    这篇文章给大家分享的是有关Redis缓存问题的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、Redis缓存的应用在我们的实际业务场景中,Redis 一般和其他数据库搭...
    99+
    2022-10-19
  • Redis缓存IO模型的示例分析
    Redis缓存IO模型的示例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。前言redis作为应用最广泛的nosql数据库之一,大大小小也经历过很多次升级。在4.0版本之...
    99+
    2023-06-21
  • Redis缓存实例分步详解
    目录一、简介1、场景2、RedisTemplate二、引入Redis1、项目中集成Redis2、添加Redis连接配置3、启动Redis服务三、测试RedisTemplate1、存值...
    99+
    2023-05-14
    Redis缓存策略 Redis缓存机制 Redis缓存
  • Redis缓冲区机制实例分析
    这篇文章主要介绍“Redis缓冲区机制实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Redis缓冲区机制实例分析”文章能帮助大家解决问题。Redis缓冲区机制Redis中的缓冲区机制就是为了...
    99+
    2023-06-30
  • Redis中缓存雪崩、缓存击穿和缓存穿透的示例分析
    这篇文章主要为大家展示了“Redis中缓存雪崩、缓存击穿和缓存穿透的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Redis中缓存雪崩、缓存击穿和缓存穿...
    99+
    2022-10-18
  • Redis数据结构类型实例代码分析
    这篇“Redis数据结构类型实例代码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Redis数据结构类型实例代码分析”文...
    99+
    2023-07-05
  • Redis架构中缓存雪崩的示例分析
    这篇文章主要介绍Redis架构中缓存雪崩的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1 真实案例云办公系统用户实时信息查询功能优化发布之后,系统发生宕机事件(系统挂起,页面无法加载)。1.1 背景我们IM...
    99+
    2023-06-29
  • getScript缓存响应实例分析
    本篇内容介绍了“getScript缓存响应实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!   C...
    99+
    2022-10-19
  • Python实例代码分析
    这篇“Python实例代码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python实例代码分析”文章吧。1.交换两个变...
    99+
    2023-06-27
  • HTML实例代码分析
    这篇文章主要讲解了“HTML实例代码分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“HTML实例代码分析”吧!   CodePage:可读/可写。整型。...
    99+
    2022-10-19
  • css代码实例分析
    这篇文章主要介绍“css代码实例分析”,在日常操作中,相信很多人在css代码实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”css代码实例分析”的疑惑有所帮助!接下来,...
    99+
    2022-10-19
  • css实例代码分析
    今天小编给大家分享一下css实例代码分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。 ...
    99+
    2022-10-19
  • php实例代码分析
    本文小编为大家详细介绍“php实例代码分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“php实例代码分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。常做的和常想的事情晦涩的if条件1)对于||的处理&nbs...
    99+
    2023-06-17
  • java代码实例分析
    这篇文章主要介绍“java代码实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java代码实例分析”文章能帮助大家解决问题。一、几个坑爹代码的目录这样使用 StringBuffer 的方法有什...
    99+
    2023-06-16
  • Promise实例代码分析
    这篇文章主要介绍“Promise实例代码分析”,在日常操作中,相信很多人在Promise实例代码分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Promise实例代码分析”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-07-05
  • SpringBoot整合Redis实现热点数据缓存的示例代码
    我们以IDEA + SpringBoot作为 Java中整合Redis的使用 的测试环境 首先,我们需要导入Redis的maven依赖 <!-- Redis的maven依赖包 ...
    99+
    2023-03-13
    SpringBoot热点数据缓存 SpringBoot整合Redis缓存
  • Redis配置文件代码的示例分析
    这篇文章将为大家详细讲解有关Redis配置文件代码的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Redis配置文件解析网上都有,这里不赘述了。提供一些值得修改的...
    99+
    2022-10-18
  • Android离线缓存的实例代码
    android做到一定程度,需要考虑缓存的问题,不信可以掏出手机看看淘宝等一些app是否无网的情况下还可以浏览,不过大部分app并没有考虑到这些问题,解决Android的缓存有...
    99+
    2022-06-06
    缓存 Android
  • redis缓存实现分页
    这篇文章将为大家详细讲解有关redis缓存实现分页,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在实际业务中我们会将一些热数据缓存到redis里面,这时候数据量比较大的话...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作