SpringBoot中Redis的基础使用
基础使用
首先引入依赖
1 2 3 4 5 6 7 8 9 10 | <!-- redis依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version> 2.9 . 0 </version> </dependency> |
然后在application.yml的spring下增加redis配置:
代码如下
redis: # Redis数据库索引(默认为0) database: 0 # Redis服务器地址 host: 127.0.0.1 # Redis服务器连接端口 port: 6379 password: '123456' jedis: pool: # 连接池最大连接数(使用负值表示没有限制) max-active: 8 # 连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: 1 # 连接池中的最大空闲连接 max-idle: 8 # 连接池中的最小空闲连接 min-idle: 0 # 连接超时时间(毫秒) timeout: 5000
然后在根包下创建一个service的文件夹加,然后在里面增加redis文件夹,redis文件夹里编写redis的基础操作函数。
编写IRedisService接口,编写增删改查函数,代码如下:
import java.util.Map; @Service public interface IRedisService { /** * 加入元素 * @param key * @param value */ void setValue(String key, Map<String, Object> value); /** * 加入元素 * @param key * @param value */ void setValue(String key, String value); /** * 加入元素 * @param key * @param value */ void setValue(String key, Object value); /** * 获取元素 * @param key */ Object getMapValue(String key); /** * 获取元素 * @param key */ Object getValue(String key); }
编写RedisServiceImpl实现,实现Redis的增删改查。
package com.example.dynamicdb.service.redis; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.stereotype.Service; import java.util.Map; import java.util.concurrent.TimeUnit; @Service("RedisServiceImpl") public class RedisServiceImpl implements IRedisService { public RedisServiceImpl(){} @Autowired private RedisTemplate redisTemplate; @Override public void setValue(String key, Map<String, Object> value) { ValueOperations<String, Object> vo = redisTemplate.opsForValue(); vo.set(key, value); redisTemplate.expire(key, 1, TimeUnit.HOURS); } @Override public Object getValue(String key) { ValueOperations<String, String> vo = redisTemplate.opsForValue(); return vo.get(key); } @Override public void setValue(String key, String value) { ValueOperations<String, Object> vo = redisTemplate.opsForValue(); vo.set(key, value); redisTemplate.expire(key, 1, TimeUnit.HOURS); } @Override public void setValue(String key, Object value) { ValueOperations<String, Object> vo = redisTemplate.opsForValue(); vo.set(key, value); redisTemplate.expire(key, 1, TimeUnit.HOURS); } @Override public Object getMapValue(String key) { ValueOperations<String, String> vo = redisTemplate.opsForValue(); return vo.get(key); } }
然后创建一个RedisController,编写一个测试接口,如下:
1 2 3 4 5 6 7 8 9 10 11 12 | @RestController public class RedisController { @Resource (name = "RedisServiceImpl" ) //使用resource实例化对象,name是指定实例化的类,用于一个接口多个类继承的情况 private IRedisService iRedisService; @PostMapping (value = "/Redis/TestRedis" ) @ApiOperation (value = "redis测试接口" , notes = "redis测试接口" , httpMethod = "POST" ) public String TestRedis(){ iRedisService.setValue( "redis" , "这是redis的测试数据" ); Object redis = iRedisService.getValue( "redis" ); return redis.toString(); } } |
redis缓存使用
首先创建一个config文件夹,然后创建一个RedisCacheConfig文件,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | 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.cache.RedisCacheManager; import org.springframework.data.redis.cache.RedisCacheWriter; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.RedisSerializationContext; import java.time.Duration; import java.util.HashMap; import java.util.Map; @EnableCaching @Configuration public class RedisCacheConfig { /** * 最新版,设置redis缓存过期时间 */ @Bean public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) { return new RedisCacheManager( RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory), this .getRedisCacheConfigurationWithTtl( 60 ), // 默认策略,未配置的 key 会使用这个 this .getRedisCacheConfigurationMap() // 指定 key 策略 ); } private Map<String, RedisCacheConfiguration> getRedisCacheConfigurationMap() { Map<String, RedisCacheConfiguration> redisCacheConfigurationMap = new HashMap<>(); //SsoCache和BasicDataCache进行过期时间配置 redisCacheConfigurationMap.put( "messagCache" , this .getRedisCacheConfigurationWithTtl( 30 * 60 )); //自定义设置缓存时间 redisCacheConfigurationMap.put( "studentCache" , this .getRedisCacheConfigurationWithTtl( 60 )); return redisCacheConfigurationMap; } private RedisCacheConfiguration getRedisCacheConfigurationWithTtl(Integer seconds) { Jackson2JsonRedisSerializer<Object> 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); RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig(); redisCacheConfiguration = redisCacheConfiguration.serializeValuesWith( RedisSerializationContext .SerializationPair .fromSerializer(jackson2JsonRedisSerializer) ).entryTtl(Duration.ofSeconds(seconds)); return redisCacheConfiguration; } } |
类名上有注解@Configuration,代表该类会在启动时加入进bean集合。
然后在RedisController下编写测试函数,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | @Autowired private SqlSession sqlSession; @GetMapping (value = "/Redis/TestRedisCache" ) @ResponseBody @DS ( "db2" ) @Cacheable (cacheNames = "userCache" , key = "#id" ) @ApiOperation (value= "查询单条记录" ,notes = "查询" ) public List<user> TestRedisCache(Integer id) { //读取第二个数据库的值 UserMapper mapper = sqlSession.getMapper(UserMapper. class ); List<user> users = mapper.test(); return users; } |
使用@Cacheable注解缓存接口的返回值,cacheNames的值和key的值,组合起来成为是缓存中的键值对的key值,如下图。
----------------------------------------------------------------------------------------------------
到此,SpringBoot中Redis的基础使用就已经介绍完了。
Github地址:https://github.com/kiba518/dynamicdb
----------------------------------------------------------------------------------------------------
注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!
若您觉得这篇文章还不错,请点击下方的【推荐】,非常感谢!
https://www.cnblogs.com/kiba/p/17480377.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2013-06-14 C#嵌套任务和子任务
2012-06-14 WPF游戏开发——小鸡快跑