springboot中使用RedisTemplate实现redis数据缓存

SpringBoot 整合 Redis 数据库实现数据缓存的本质是整合 Redis 数据库,通过对需要“缓存”的数据存入 Redis 数据库中,下次使用时先从 Redis 中获取,Redis 中没有再从数据库中获取,这样就实现了 Redis 做数据缓存。 ??按照惯例,下面一步一步的实现 Springboot 整合 Redis 来存储数据,读取数据。

  1. 项目添加依赖首页第一步还是在项目添加 Redis 的环境, Jedis。
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
</dependency>

2. 添加redis的参数

spring:
### Redis Configuration
  redis:
    pool:
      max-idle: 10
      min-idle: 5
      max-total: 20
    hostName: 127.0.0.1
    port: 6379

3.编写一个 RedisConfig 注册到 Spring 容器

package com.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import redis.clients.jedis.JedisPoolConfig;

/**
 * 描述:Redis 配置类
 */
@Configuration
public class RedisConfig {
	/**
	 * 1.创建 JedisPoolConfig 对象。在该对象中完成一些连接池的配置
	 */
	@Bean
	@ConfigurationProperties(prefix="spring.redis.pool")
	public JedisPoolConfig jedisPoolConfig() {
		JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();

		return jedisPoolConfig;
	}

	/**
	 * 2.创建 JedisConnectionFactory:配置 redis 连接信息
	 */
	@Bean
	@ConfigurationProperties(prefix="spring.redis")
	public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig jedisPoolConfig) {

		JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(jedisPoolConfig);

		return jedisConnectionFactory;
	}

	/**
	 * 3.创建 RedisTemplate:用于执行 Redis 操作的方法
	 */
	@Bean
	public RedisTemplate<String, Object> redisTemplate(JedisConnectionFactory jedisConnectionFactory) {

		RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();

		// 关联
		redisTemplate.setConnectionFactory(jedisConnectionFactory);
		// 为 key 设置序列化器
		redisTemplate.setKeySerializer(new StringRedisSerializer());
		// 为 value 设置序列化器
		redisTemplate.setValueSerializer(new StringRedisSerializer());

		return redisTemplate;
	}
}

4.使用redisTemplate

package com.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.bean.Users;

/**
* @Description 整合 Redis 测试Controller
* @version V1.0
*/
@RestController
public class RedisController {

	@Autowired
	private RedisTemplate<String, Object> redisTemplate;

	@RequestMapping("/redishandle")
	public String redishandle() {

		//添加字符串
		redisTemplate.opsForValue().set("author", "欧阳");

		//获取字符串
		String value = (String)redisTemplate.opsForValue().get("author");
		System.out.println("author = " + value);

		//添加对象
		//重新设置序列化器
		redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
		redisTemplate.opsForValue().set("users", new Users("1" , "张三"));

		//获取对象
		//重新设置序列化器
		redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
		Users user = (Users)redisTemplate.opsForValue().get("users");
		System.out.println(user);

		//以json格式存储对象
		//重新设置序列化器
		redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(Users.class));
		redisTemplate.opsForValue().set("usersJson", new Users("2" , "李四"));

		//以json格式获取对象
		//重新设置序列化器
		redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(Users.class));
		user = (Users)redisTemplate.opsForValue().get("usersJson");
		System.out.println(user);

		return "home";
	}
}

5.项目实战中redisTemplate的使用

/**
 *
 */
package com.shiwen.lujing.service.impl;

import java.util.List;
import java.util.concurrent.TimeUnit;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.shiwen.lujing.dao.mapper.WellAreaDao;
import com.shiwen.lujing.service.WellAreaService;
import com.shiwen.lujing.util.RedisConstants;

/**
 * @author zhangkai
 *
 */
@Service
public class WellAreaServiceImpl implements WellAreaService {

	@Autowired
	private WellAreaDao wellAreaDao;

	@Autowired
	private RedisTemplate<String, String> stringRedisTemplate;

	/*
	 * (non-Javadoc)
	 *
	 * @see com.shiwen.lujing.service.WellAreaService#getAll()
	 */
	@Override
	public String getAll() throws JsonProcessingException {
		//redis中key是字符串
		ValueOperations<String, String> opsForValue = stringRedisTemplate.opsForValue();
		//通过key获取redis中的数据
		String wellArea = opsForValue.get(RedisConstants.REDIS_KEY_WELL_AREA);
		//如果没有去查数据库
		if (wellArea == null) {
			List<String> wellAreaList = wellAreaDao.getAll();
			wellArea = new ObjectMapper().writeValueAsString(wellAreaList);
			//将查出来的数据存储在redis中
			opsForValue.set(RedisConstants.REDIS_KEY_WELL_AREA, wellArea, RedisConstants.REDIS_TIMEOUT_1, TimeUnit.DAYS);
            // set(K key, V value, long timeout, TimeUnit unit)
            //timeout:过期时间;  unit:时间单位
            //使用:redisTemplate.opsForValue().set("name","tom",10, TimeUnit.SECONDS);
            //redisTemplate.opsForValue().get("name")由于设置的是10秒失效,十秒之内查询有结
            //果,十秒之后返回为null
		}
		return wellArea;
	}

}

6.redis中使用的key

package com.shiwen.lujing.util;

/**
 * redis 相关常量
 *
 *
 */
public interface RedisConstants {

	/**
	 * 井首字
	 */
	String REDIS_KEY_JING_SHOU_ZI = "JING-SHOU-ZI";

	/**
	 * 井区块
	 */
	String REDIS_KEY_WELL_AREA = "WELL-AREA";

	/**
	 *
	 */
	long REDIS_TIMEOUT_1 = 1L;

}

原文地址:https://www.cnblogs.com/wang66a/p/12069306.html

时间: 2024-10-03 23:28:16

springboot中使用RedisTemplate实现redis数据缓存的相关文章

.net redis数据缓存(二) redis操作List集合带分页

1.编写一个简单的redishelper类库,封装ServiceStack.Redis 1 public class RedisHelper 2 { 3 #region 基本用户名密码,使用配置文件 4 /// <summary> 5 /// 写入redis服务器的ip+port 6 /// </summary> 7 public static string WriteServerList = ConfigurationManager.AppSettings["Write

Redis数据缓存

Redis 锁定 编辑 本词条由“科普中国”百科科学词条编写与应用工作项目审核. Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMware主持.从2013年5月开始,Redis的开发由Pivotal赞助. 中文名 Redis 外文名 Redis 分    类 数据库 相    关 NoSql 数据存储 目录 1定义 2作者 3性能 4支持语言 5数据模型

Spring中使用RedisTemplate操作Redis(spring-data-redis)

Redis 数据结构简介 Redis可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串).List(列表).Set(集合).Hash(散列)和 Zset(有序集合). 下面来对这5种数据结构类型作简单的介绍: 结构类型 结构存储的值 结构的读写能力 String 可以是字符串.整数或者浮点数 对整个字符串或者字符串的其中一部分执行操作:对象和浮点数执行自增(increment)或者自减(decrement) List 一个链表,链表上的每个节点都包含了一个字

.net redis数据缓存(一) redis在Windows环境中的安装

1.下载redis 地址:http://https://github.com/MicrosoftArchive/redis/releases Windows下载msi或者zip都是可以的.msi会在path环境变量中配置变量,我一般下载的是zip的,我这里也是用zip的讲解,下载下来后解压会看到如下文件: ??? 接下来,我们用cmd来运行redis服务器.看准我红框中的内容 回车以后,会看到如下画面,说明成功 ??? 接下来我们还有下载一个桌面redis工具,用来管理redis缓存,我这里推荐

在ie中关于ajax请求获得数据缓存问题的解决办法

ie浏览器总会出现一些很奇特的问题,比如,在默认的情况下,一般发送ajaxget请求,IE浏览器第一次会向服务器端请求,获取最新数据,如果地址和参数不编号,第二次及以后再发送请求,它就默认获取的缓存数据,这样的问题是ie中很常见的问题,一般POST则 认为是一个 变动性 访问 (浏览器 认为 POST的提交 必定是 有改变的),总结几个解决的办法: 1.在ajax发送请求前加上 anyAjaxObj.setRequestHeader("If-Modified-Since","

RedisTemplate操作Redis数据结构-字符串类型

SpringBoot中使用RedisTemplate执行Redis基本命令 在application.properties或application.yml文件中配置Redis spring: redis: host: 127.0.0.1 port: 6379 编写代码 package com.heaven.redis; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; import org.junit.run

使用redis作为缓存,数据还需要存入数据库中吗?(转)

转自https://blog.csdn.net/wypersist/article/details/79955704 使用redis作为缓存,数据还需要存入数据库中吗? 我的答案是: 1redis只是缓存,不是数据库如mysql,所以redis中有的数据库,mysql中一定有. 2用户请求先去请求redis,如果没有,再去数据库中去读取. 3redis中缓存一些请求量比较大的数据(这些缓存数据,mysql中一定也是有的),没必要所有数据都缓存到redis中. 5之所以从缓存中拿数据会快,是因为缓

Spring Boot 中集成 Redis 作为数据缓存

只添加注解:@Cacheable,不配置key时,redis 中默认存的 key 是:users::SimpleKey [](1.redis-cli 中,通过命令:keys * 查看:2.key:缓存对象存储在Map集合中的key值,非必需,缺省按照函数的所有参数组合作为key值,若自己配置需使用SpEL表达式,比如:@Cacheable(key = "#p0"):使用函数第一个参数作为缓存的key值,更多关于SpEL表达式的详细内容可参考官方文档). 相关文章 网址 SpringBo

Spring Boot使用redis实现数据缓存

基于Spring Boot 1.5.2.RELEASE版本,一方面验证与Redis的集成方法,另外了解使用方法. 集成方法 配置依赖 修改pom.xml,增加如下内容. <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 配置Redis