spring boot中redis的使用示例

您所在的位置:网站首页 redis用法示例 spring boot中redis的使用示例

spring boot中redis的使用示例

2023-02-18 22:00| 来源: 网络整理| 查看: 265

1.首先创建spring boot项目,创建spring boot项目的方法请参考如下链接:

 https://blog.csdn.net/liutong123987/article/details/79385513

2.在刚才创建好项目的pom.xml文件里面增加如下配置

org.springframework.boot spring-boot-starter-data-redis

3.安装redis,点击exe文件开启redies服务

4.依次在项目中创建如下几个类

public class Author { public String name; public String intro_l; public String getIntro_l() { return intro_l; } public void setIntro_l(String intro_l) { this.intro_l = intro_l; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Author(String name, String intro_l) { super(); this.name = name; this.intro_l = intro_l; } public Author() { super(); } @Override public String toString() { return "Author [name=" + name + ", intro_l=" + intro_l + "]"; } } import java.lang.reflect.Method; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.interceptor.KeyGenerator; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.cache.RedisCacheManager; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; @Configuration @EnableCaching public class RedisConfiguration extends CachingConfigurerSupport { /** * 自定义生成key的规则 */ @Override public KeyGenerator keyGenerator() { return new KeyGenerator() { @Override public Object generate(Object o, Method method, Object... objects) { //格式化缓存key字符串 StringBuilder sb = new StringBuilder(); //追加类名 sb.append(o.getClass().getName()); //追加方法名 sb.append(method.getName()); //遍历参数并且追加 for (Object obj : objects) { sb.append(obj.toString()); } System.out.println("调用Redis缓存Key : " + sb.toString()); return sb.toString(); } }; } /** * 采用RedisCacheManager作为缓存管理器 * @param connectionFactory */ @Bean public CacheManager cacheManager(RedisConnectionFactory connectionFactory) { RedisCacheManager redisCacheManager = RedisCacheManager.create(connectionFactory); return redisCacheManager; } @Bean public RedisTemplate redisTemplate(RedisConnectionFactory factory) { 解决键、值序列化问题 StringRedisTemplate template = new StringRedisTemplate(factory); 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.setValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; } } import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; public interface RedisHelper { /** * Hash结构 添加元素 * @param key key * @param hashKey hashKey * @param domain 元素 */ void hashPut(String key, HK hashKey, T domain); /** * Hash结构 获取指定key所有键值对 * @param key * @return */ Map hashFindAll(String key); /** * Hash结构 获取单个元素 * @param key * @param hashKey * @return */ T hashGet(String key, HK hashKey); void hashRemove(String key, HK hashKey); /** * List结构 向尾部(Right)添加元素 * @param key * @param domain * @return */ Long listPush(String key, T domain); /** * List结构 向头部(Left)添加元素 * @param key * @param domain * @return */ Long listUnshift(String key, T domain); /** * List结构 获取所有元素 * @param key * @return */ List listFindAll(String key); /** * List结构 移除并获取数组第一个元素 * @param key * @return */ T listLPop(String key); /** * 对象的实体类 * @param key * @param domain * @return */ void valuePut(String key, T domain); /** * 获取对象实体类 * @param key * @return */ T getValue(String key); void remove(String key); /** * 设置过期时间 * @param key 键 * @param timeout 时间 * @param timeUnit 时间单位 */ boolean expirse(String key, long timeout, TimeUnit timeUnit); } import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.HashOperations; import org.springframework.data.redis.core.ListOperations; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.SetOperations; import org.springframework.data.redis.core.ValueOperations; import org.springframework.data.redis.core.ZSetOperations; import org.springframework.stereotype.Service; @Service("RedisHelper") public class RedisHelperImpl implements RedisHelper { // 在构造器中获取redisTemplate实例, key(not hashKey) 默认使用String类型 private RedisTemplate redisTemplate; // 在构造器中通过redisTemplate的工厂方法实例化操作对象 private HashOperations hashOperations; private ListOperations listOperations; private ZSetOperations zSetOperations; private SetOperations setOperations; private ValueOperations valueOperations; // IDEA虽然报错,但是依然可以注入成功, 实例化操作对象后就可以直接调用方法操作Redis数据库 @Autowired public RedisHelperImpl(RedisTemplate redisTemplate) { this.redisTemplate = redisTemplate; this.hashOperations = redisTemplate.opsForHash(); this.listOperations = redisTemplate.opsForList(); this.zSetOperations = redisTemplate.opsForZSet(); this.setOperations = redisTemplate.opsForSet(); this.valueOperations = redisTemplate.opsForValue(); } @Override public void hashPut(String key, HK hashKey, T domain) { hashOperations.put(key, hashKey, domain); } @Override public Map hashFindAll(String key) { return hashOperations.entries(key); } @Override public T hashGet(String key, HK hashKey) { return hashOperations.get(key, hashKey); } @Override public void hashRemove(String key, HK hashKey) { hashOperations.delete(key, hashKey); } @Override public Long listPush(String key, T domain) { return listOperations.rightPush(key, domain); } @Override public Long listUnshift(String key, T domain) { return listOperations.leftPush(key, domain); } @Override public List listFindAll(String key) { if (!redisTemplate.hasKey(key)) { return null; } return listOperations.range(key, 0, listOperations.size(key)); } @Override public T listLPop(String key) { return listOperations.leftPop(key); } @Override public void valuePut(String key, T domain) { valueOperations.set(key, domain); } @Override public T getValue(String key) { return valueOperations.get(key); } @Override public void remove(String key) { redisTemplate.delete(key); } @Override public boolean expirse(String key, long timeout, TimeUnit timeUnit) { return redisTemplate.expire(key, timeout, timeUnit); } } import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest public class TestRedis { @Autowired private StringRedisTemplate stringRedisTemplate; @Autowired private RedisTemplate redisTemplate; @Autowired private RedisHelperImpl redisHelper; @Test public void test() throws Exception { Author user = new Author(); user.setName("Alex"); user.setIntro_l("不会打篮球的程序不是好男人"); // 像redis中保存数据 redisHelper.valuePut("aaa", user); // 根据key获取缓存数据 Author autor = (Author) redisHelper.getValue("aaa"); // 根据key删掉一条数据 //redisHelper.remove("aaa"); System.out.println(autor); } @Test public void testObj() throws Exception { Author user = new Author(); user.setName("Jerry"); user.setIntro_l("不会打篮球的程序不是好男人!"); ValueOperations operations = redisTemplate.opsForValue(); operations.set("502", user); Thread.sleep(500); boolean exists = redisTemplate.hasKey("502"); if (exists) { System.out.println(redisTemplate.opsForValue().get("502")); } else { System.out.println("exists is false"); } } }

5.在application.properties中配置如下内容

spring.redis.database=0  spring.redis.host=192.168.0.32 spring.redis.port=6379  spring.redis.password=   spring.redis.pool.max-active=8  spring.redis.pool.max-wait=-1  spring.redis.pool.max-idle=8  spring.redis.pool.min-idle=0  spring.redis.timeout=5000

其中timeout配置不要太小,否则会报错连接超时

6.运行刚才创建的TestRedis类中的test方法,则在redis中保存了一条以aaa为键的数据,打开redis客户端,输入命令 get aaa 可以查看到刚才写入的数据。



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3