基于SpringBoot3引入Redis并封装常用的操作RedisUtils,并提供简单使用示例。
系列文章指路👉
系列文章-基于SpringBoot3创建项目并配置常用的工具和一些常用的类
文章目录
- Redis For Windows下载
- 简单配置
- 以命令行的方法启动
- 以服务的方式启动
- 简单使用
- 在Spring Boot中引入Redis
- pom.xml 引入依赖
- application.yml修改配置
- 配置序列化方式
- 编写工具类 RedisUtils
- 简单测试
Redis For Windows下载
感谢大佬,链接放下面了:zkteco-home/redis-windows
简单配置
-
将Redis路径放入环境变量中
-
修改默认redis.conf 添加密码
save "" port 6379 requirepass '123456' maxmemory 256mb appendonly no maxmemory-policy allkeys-lru
以命令行的方法启动
# (也可以不带redis.conf,使用默认的配置启动) # redis-server redis-server redis.conf
以服务的方式启动
- 注册服务
# 注册服务 redis-server --service-install --service-name redisService1 redis.conf
- 启用、停止、删除服务
redis-server --service-start --service-name redisService1 redis-server --service-stop --service-name redisService1 redis-server --service-uninstall --service-name redisService1
3. WINDOWS + R 输入 services.msc
可以看到已经起来了,可以在属性中设置自动启动或者手动启动。
简单使用
在Spring Boot中引入Redis
pom.xml 引入依赖
org.springframework.boot spring-boot-starter-data-redis org.apache.commons commons-pool2 application.yml修改配置
spring: data: redis: host: localhost port: 6379 password: 123456 database: 0 lettuce: pool: min-idle: 0 max-idle: 8 max-wait: -1ms max-active: 16
配置序列化方式
使用默认的序列化方式,在可视化工具中查看已经存入的key/value 很困难。
package com.ya.boottest.utils.config; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; /** *
* Redis 配置类 *
* * @author Ya Shi * @since 2024/3/12 14:21 */ @Configuration public class YaRedisConfig { @Bean public RedisTemplateredisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate template = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory); // 设置objectMapper:转换java对象的时候使用 ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.activateDefaultTyping( LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.WRAPPER_ARRAY); Jackson2JsonRedisSerializer 编写工具类 RedisUtils
package com.ya.boottest.utils.redis; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.script.DefaultRedisScript; import org.springframework.stereotype.Component; import java.util.Collections; import java.util.concurrent.TimeUnit; /** *
* Redis 工具类 *
* * @author Ya Shi * @since 2024/3/12 14:02 */ @Component public class RedisUtils { @Autowired private RedisTemplateredisTemplate; private static final Long RELEASE_SUCCESS = 1L; private static final String RELEASE_SCRIPT = "if redis.call('get', KEYS[1]) == ARGV[1] then " + "return redis.call('del', KEYS[1]) " + "else " + "return 0 " + "end";; // 设置键值对 public void set(String key, Object value) { redisTemplate.opsForValue().set(key, value); } // 设置键值对并指定过期时间 public void set(String key, Object value, long timeout, TimeUnit unit) { redisTemplate.opsForValue().set(key, value, timeout, unit); } // 设置键值对并指定过期时间 public void set(String key, Object value, long seconds) { redisTemplate.opsForValue().set(key, value, seconds, TimeUnit.SECONDS); } // 获取值 public Object get(String key) { return redisTemplate.opsForValue().get(key); } // 获取值 public String getString(String key) { Object obj = redisTemplate.opsForValue().get(key); return obj == null ? null : obj.toString(); } // 删除键 public Boolean delete(String key) { return redisTemplate.delete(key); } // 判断键是否存在 public Boolean hasKey(String key) { return redisTemplate.hasKey(key); } // 如果不存在,则设置 public Boolean setNx(String key, Object value) { return redisTemplate.opsForValue().setIfAbsent(key, value); } // 如果不存在,则设置,附带过期时间 public Boolean tryLock(String lockKey, String requestId, long seconds) { return redisTemplate.opsForValue().setIfAbsent(lockKey, requestId, seconds, TimeUnit.SECONDS); } // 如果不存在,则设置,附带过期时间 public Boolean tryLock(String lockKey, String requestId, long timeout, TimeUnit unit) { return redisTemplate.opsForValue().setIfAbsent(lockKey, requestId, timeout, unit); } // 不存在返回true,存在则删除 public Boolean releaseLock(String lockKey, String requestId){ DefaultRedisScript redisScript = new DefaultRedisScript<>(); redisScript.setScriptText(RELEASE_SCRIPT); redisScript.setResultType(Long.class); Long result = redisTemplate.execute(redisScript, Collections.singletonList(lockKey), Collections.singletonList(requestId)); return RELEASE_SUCCESS.equals(result); } } 简单测试
@Autowired RedisUtils redisUtils; @Test void contextLoads() { redisUtils.set("test:key:name", "xxxxxx"); redisUtils.set("test:key:name2", "yyyyy"); System.out.println(redisUtils.getString("test:key:name2")); }
完事。
君子终日乾乾,夕惕若厉,无咎。
—— 《周易·易经·乾卦第一》
-
还没有评论,来说两句吧...