redis缓存数据库中数据的方法

本文实例为大家分享了redis缓存数据库中数据的具体代码,供大家参考,具体内容如下

将数据库的数据保存到redis缓存

当第一次查询时,缓存没有对应的数据,则会查询数据库,并将数据更新到缓存
当缓存中有对应的数据时,则会直接访问缓存,则不查询数据库
这样在性能优化上有很大的帮助

ProvinceServiceImpl

public class ProvinceServiceImpl implements ProvinceService {
    private ProvinceDao dao = new ProvinceDaoImpl();

    @Override
    public List<Province> findAll() {

        return dao.findAll();
    }

    /**
     * 使用redis缓存
     * @return
     */
    @Override
    public String findAllJson(){
        //1.先从redis中查询数据
        //1.1获取客户端连接
        Jedis jedis = JedisUtils.getJedis();
        String province_json = jedis.get("province");

        //2.判断province_json数据是否为null
        if(province_json == null || province_json.length() == 0){
            //redis中没有数据
            System.out.println("redis中没有数据,查询数据库...");
            //2.1从数据库中查询
            List<Province> list = dao.findAll();

            //2.2将list序列化为json
            ObjectMapper mapper = new ObjectMapper();
            try {
                province_json = mapper.writeValueAsString(list);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }

            //2.3将json数据存入redis中
            jedis.set("province", province_json);

            //释放资源
            jedis.close();
        }else {
            System.out.println("redis中有数据,查询缓存...");
        }

        return province_json;
    }
}

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<script src="js/jquery-3.3.1.min.js"></script>

    <script>
        $(function (){
            //发送ajax请求,加载所有省份数据
            $.get("provinceServlet",{},function (data){
                //[{"id":1,"name":"北京"},{"id":2,"name":"上海"},{"id":3,"name":"广州"},{"id":4,"name":"武汉"}]
                //1.获取select
                var province = $("#province");
                //2.遍历json数组
                $(data).each(function (){
                    //3.创建<option>
                    var option = "<option name='" + this +"'>" + this.name + "</option>";

                    //4.调用select的append方法追加
                    province.append(option);
                });

            });
        });
    </script>
<body>

    <select id="province">
        <option>---请选择省份---</option>

    </select>
</body>
</html>

效果展示

第一次查询时

此时可以看到redis没有数据,所以查询了数据库

第二次查询

此时可以看到redis中已经有缓存了,所以没有查询数据库

注意

当数据中的数据进行增删改时,缓存的数据依旧不会改变,所以当进行增删改操作后,应该删除redis中的缓存,然后在重新缓存,从而达到更新缓存的效果。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java自定义注解实现Redis自动缓存的方法

    在实际开发中,可能经常会有这样的需要:从MySQL中查询一条数据(比如用户信息),此时需要将用户信息保存至Redis. 刚开始我们可能会在查询的业务逻辑之后再写一段Redis相关操作的代码,时间长了后发现这部分代码实际上仅仅做了Redis的写入动作,跟业务逻辑没有实质的联系,那么有没有什么方法能让我们省略这些重复劳动呢? 首先想到用AOP,在查询到某些数据这一切入点(Pointcut)完成我们的切面相关处理(也就是写入Redis).那么,如何知道什么地方需要进行缓存呢,也就是什么地方需要用到AO

  • Redis 缓存淘汰策略和事务实现乐观锁详情

    目录 缓存淘汰策略 标题LRU原理 标题Redis缓存淘汰策略 设置最大缓存 淘汰策略 Redis事务 Redis事务介绍 MULTI EXEC DISCARD WATCH Redis 不支持事务回滚(为什么呢) Redis乐观锁 Redis乐观锁实现秒杀 缓存淘汰策略 标题LRU原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”. 最常见的实现是使用一个链表保存缓存数据,

  • 配置Spring4.0注解Cache+Redis缓存的用法

    前言: 目前公司项目在上一个技术架构的处理,已经搭建好了Redis,但redis只用在了做session的管理,然而 后台的对象缓存没有用上 1. redis 和 ehcache的区别: 简单了解了下,个人觉得 从部署上而言,redis更适合分布式部署,ehcache是在每台应用服务器上开辟一块内存做缓存,集群时还得考虑缓存的情况, redis就不需要考虑缓存了.单独部署在一台服务器中(也可以是在某一台应用服务器中) 2. 项目配置(spring mvc+maven+mybaits+redis)

  • spring整合redis缓存并以注解(@Cacheable、@CachePut、@CacheEvict)形式使用

    maven项目中在pom.xml中依赖2个jar包,其他的spring的jar包省略: <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.8.1</version> </dependency> <dependency> <groupId>org.springfra

  • Spring AOP如何整合redis(注解方式)实现缓存统一管理详解

    前言 项目使用redis作为缓存数据,但面临着问题,比如,项目A,项目B都用到redis,而且用的redis都是一套集群,这样会带来一些问题. 问题:比如项目A的开发人员,要缓存一些热门数据,想到了redis,于是乎把数据放入到了redis,自定义一个缓存key:hot_data_key,数据格式是项目A自己的数据格式,项目B也遇到了同样的问题,也要缓存热门数据,也是hot_data_key,数据格式是项目B是自己的数据格式,由于用的都是同一套redis集群,这样key就是同一个key,有的数据

  • spring boot注解方式使用redis缓存操作示例

    本文实例讲述了spring boot注解方式使用redis缓存操作.分享给大家供大家参考,具体如下: 引入依赖库 在pom中引入依赖库,如下 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> &l

  • Redis与本地缓存的结合实现

    目录 前言 设计示例 Redis懒加载缓存 流程图 代码示例 优点 缺点 总结 Redis结合本地缓存 流程图 代码示例 优点 缺点 总结 后记 前言 我们开发中经常用到Redis作为缓存,将高频数据放在Redis中能够提高业务性能,降低MySQL等关系型数据库压力,甚至一些系统使用Redis进行数据持久化,Redis松散的文档结构非常适合业务系统开发,在精确查询,数据统计业务有着很大的优势.但是高频数据流处理系统中,Redis的压力也会很大,同时I/0开销才是耗时的主要原因,这时候为了降低Re

  • Redis缓存穿透/击穿工具类的封装

    目录 1. 简单的步骤说明 2. 逻辑缓存数据类型 3. 缓冲工具类的封装 3.1 CacheClient 类的类图结构 3.2 CacheClient 类代码 1. 简单的步骤说明 创建一个逻辑缓存数据类型 封装缓冲穿透和缓冲击穿工具类 2. 逻辑缓存数据类型 这里主要是创建一个可以往Redis里边存放的数据类型 RedisData 的Java类型 import lombok.Data; import java.time.LocalDateTime; @Data public class Re

  • Spring Boot 基于注解的 Redis 缓存使用详解

    看文本之前,请先确定你看过上一篇文章<Spring Boot Redis 集成配置>并保证 Redis 集成后正常可用,因为本文是基于上文继续增加的代码. 一.创建 Caching 配置类 RedisKeys.Java package com.shanhy.example.redis; import java.util.HashMap; import java.util.Map; import javax.annotation.PostConstruct; import org.springf

  • 使用注解实现Redis缓存功能

    本文实例为大家分享了使用注解实现Redis缓存功能的具体代码,供大家参考,具体内容如下 非关系型内存数据库,有持久化操作, c语言编写的key,value存储系统(区别于MySQL的二维表格的形式存储.) rdb:周期性的持久化 aof:以日志形式追加 默认rdb开启,同时开启使用aof 数据类型:string.list.set.zset.hash. bitMaps 字节形式存储.geospatial 经纬度类型... 单线程:采用多路io复用实现高并发 使用: 添加依赖 <!-- redis

随机推荐