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

06-30 1000阅读

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

系列文章指路👉

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

文章目录

  • Redis For Windows下载
    • 简单配置
    • 以命令行的方法启动
    • 以服务的方式启动
    • 简单使用
    • 在Spring Boot中引入Redis
      • pom.xml 引入依赖
      • application.yml修改配置
      • 配置序列化方式
      • 编写工具类 RedisUtils
      • 简单测试

        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
        

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

        以服务的方式启动

        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
        

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

        3. WINDOWS + R 输入 services.msc

        可以看到已经起来了,可以在属性中设置自动启动或者手动启动。

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

        简单使用

        1. 进入命令行 redis-cli,设置了密码的话需要认证auth 123456

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

        2. 存取示例:

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

        在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 RedisTemplate redisTemplate(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 jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(objectMapper, Object.class); StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); // 设置key/value值的序列化方式 template.setKeySerializer(stringRedisSerializer); template.setValueSerializer(jackson2JsonRedisSerializer); template.setHashKeySerializer(stringRedisSerializer); template.setHashValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; } }

        编写工具类 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 RedisTemplate redisTemplate; 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"));
            }
        

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

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

        完事。


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

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

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]