0


基于SpringBoot3引入Redis并封装常用的操作RedisUtils

基于SpringBoot3引入Redis并封装常用的操作RedisUtils,并提供简单使用示例。

系列文章指路👉

系列文章-基于SpringBoot3创建项目并配置常用的工具和一些常用的类

文章目录

Redis For Windows下载

感谢大佬,链接放下面了:zkteco-home/redis-windows

简单配置

  1. 将Redis路径放入环境变量中
  2. 修改默认redis.conf 添加密码
save ""
port 6379 
requirepass '123456' 
maxmemory 256mb
appendonly no
maxmemory-policy allkeys-lru

以命令行的方法启动

# (也可以不带redis.conf,使用默认的配置启动) #  redis-server
redis-server redis.conf

在这里插入图片描述

以服务的方式启动

  1. 注册服务
# 注册服务
redis-server --service-install --service-name redisService1 redis.conf
  1. 启用、停止、删除服务
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

可以看到已经起来了,可以在属性中设置自动启动或者手动启动。
在这里插入图片描述

简单使用

  1. 进入命令行 redis-cli,设置了密码的话需要认证auth 123456在这里插入图片描述
  2. 存取示例:在这里插入图片描述

在Spring Boot中引入Redis

pom.xml 引入依赖

<!-- 集成redis依赖  --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- redis 连接池  --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId></dependency>

application.yml修改配置

spring:data:redis:host: localhost
      port:6379password:123456database:0lettuce:pool:min-idle:0max-idle:8max-wait:-1ms
          max-active:16

配置序列化方式

使用默认的序列化方式,在可视化工具中查看已经存入的key/value 很困难。

packagecom.ya.boottest.utils.config;importcom.fasterxml.jackson.annotation.JsonAutoDetect;importcom.fasterxml.jackson.annotation.JsonTypeInfo;importcom.fasterxml.jackson.annotation.PropertyAccessor;importcom.fasterxml.jackson.databind.ObjectMapper;importcom.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.data.redis.connection.RedisConnectionFactory;importorg.springframework.data.redis.core.RedisTemplate;importorg.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;importorg.springframework.data.redis.serializer.StringRedisSerializer;/**
 * <p>
 * Redis 配置类
 * </p>
 *
 * @author Ya Shi
 * @since 2024/3/12 14:21
 */@ConfigurationpublicclassYaRedisConfig{@BeanpublicRedisTemplate<String,Object>redisTemplate(RedisConnectionFactory redisConnectionFactory){RedisTemplate<String,Object> template =newRedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);// 设置objectMapper:转换java对象的时候使用ObjectMapper objectMapper =newObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL,JsonAutoDetect.Visibility.ANY);
        objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,ObjectMapper.DefaultTyping.NON_FINAL,JsonTypeInfo.As.WRAPPER_ARRAY);Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer =newJackson2JsonRedisSerializer<>(objectMapper,Object.class);StringRedisSerializer stringRedisSerializer =newStringRedisSerializer();// 设置key/value值的序列化方式
        template.setKeySerializer(stringRedisSerializer);
        template.setValueSerializer(jackson2JsonRedisSerializer);
        template.setHashKeySerializer(stringRedisSerializer);
        template.setHashValueSerializer(jackson2JsonRedisSerializer);

        template.afterPropertiesSet();return template;}}

编写工具类 RedisUtils

packagecom.ya.boottest.utils.redis;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.data.redis.core.RedisTemplate;importorg.springframework.data.redis.core.script.DefaultRedisScript;importorg.springframework.stereotype.Component;importjava.util.Collections;importjava.util.concurrent.TimeUnit;/**
 * <p>
 *  Redis 工具类
 * </p>
 *
 * @author Ya Shi
 * @since 2024/3/12 14:02
 */@ComponentpublicclassRedisUtils{@AutowiredprivateRedisTemplate<String,Object> redisTemplate;privatestaticfinalLongRELEASE_SUCCESS=1L;privatestaticfinalStringRELEASE_SCRIPT="if redis.call('get', KEYS[1]) == ARGV[1] then "+"return redis.call('del', KEYS[1]) "+"else "+"return 0 "+"end";;// 设置键值对publicvoidset(String key,Object value){
        redisTemplate.opsForValue().set(key, value);}// 设置键值对并指定过期时间publicvoidset(String key,Object value,long timeout,TimeUnit unit){
        redisTemplate.opsForValue().set(key, value, timeout, unit);}// 设置键值对并指定过期时间publicvoidset(String key,Object value,long seconds){
        redisTemplate.opsForValue().set(key, value, seconds,TimeUnit.SECONDS);}// 获取值publicObjectget(String key){return redisTemplate.opsForValue().get(key);}// 获取值publicStringgetString(String key){Object obj = redisTemplate.opsForValue().get(key);return obj ==null?null: obj.toString();}// 删除键publicBooleandelete(String key){return redisTemplate.delete(key);}// 判断键是否存在publicBooleanhasKey(String key){return redisTemplate.hasKey(key);}// 如果不存在,则设置publicBooleansetNx(String key,Object value){return redisTemplate.opsForValue().setIfAbsent(key, value);}// 如果不存在,则设置,附带过期时间publicBooleantryLock(String lockKey,String requestId,long seconds){return redisTemplate.opsForValue().setIfAbsent(lockKey, requestId, seconds,TimeUnit.SECONDS);}// 如果不存在,则设置,附带过期时间publicBooleantryLock(String lockKey,String requestId,long timeout,TimeUnit unit){return redisTemplate.opsForValue().setIfAbsent(lockKey, requestId, timeout, unit);}// 不存在返回true,存在则删除publicBooleanreleaseLock(String lockKey,String requestId){DefaultRedisScript<Long> redisScript =newDefaultRedisScript<>();
        redisScript.setScriptText(RELEASE_SCRIPT);
        redisScript.setResultType(Long.class);Long result = redisTemplate.execute(redisScript,Collections.singletonList(lockKey),Collections.singletonList(requestId));returnRELEASE_SUCCESS.equals(result);}}

简单测试

@AutowiredRedisUtils redisUtils;@TestvoidcontextLoads(){
        redisUtils.set("test:key:name","xxxxxx");
        redisUtils.set("test:key:name2","yyyyy");System.out.println(redisUtils.getString("test:key:name2"));}

在这里插入图片描述
在这里插入图片描述
完事。


  • 君子终日乾乾,夕惕若厉,无咎。*

  • —— 《周易·易经·乾卦第一》*

标签: redis java

本文转载自: https://blog.csdn.net/shijizhe1/article/details/136655823
版权归原作者 小雅痞 所有, 如有侵权,请联系我们删除。

“基于SpringBoot3引入Redis并封装常用的操作RedisUtils”的评论:

还没有评论