跳至主要內容

Redis组件

杨轩-国实信息大约 2 分钟常用组件缓存

git地址:

http://10.16.202.103:8089/component/component-ser/redis-spring-boot-starter

spring-boot-starter-data-redis 进行了二次封装,简化了使用 RedisTemplate 的操作。

使用

添加依赖:

<dependency>
    <groupId>com.gosci.tech</groupId>
    <artifactId>redis-spring-boot-starter</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</dependency>

配置redis连接信息:

spring:
  redis:
    host: 127.0.0.1
    port: 6379
    timeout: 10s
    password: 123456
    database: 6
    lettuce:
      pool:
        min-idle: 0
        max-idle: 8
        max-active: 8
        max-wait: -1ms

value 操作示例

@RestController
@RequestMapping("redis")
@RequiredArgsConstructor
public class ValueTestController {
    private final RedisValueOpe redisValueOpe;

    /**
     * 设置指定 key 的值
     */
    @GetMapping("set")
    public void set(@RequestParam String key,@RequestParam String value){
        redisValueOpe.set(key,value);
    }

    /**
     * 设置指定 key 的值,带过期时间
     */
    @GetMapping("set/ttl")
    public void setTtl(String key,String value){
        redisValueOpe.setEx(key,value,100, TimeUnit.SECONDS);
    }
    
     /**
     * 获取指定 key 的值,String类型,不需要指定泛型
     */
    @GetMapping("get")
    public String get(String key){
        return redisValueOpe.get(key);
    }

    /** 
    * get 其他类型如Double,需要指定泛型
    */
    @GetMapping("get2")
    public Double get2(String key){
        return redisValueOpe.<Double>get(key);
    }

    /**
     * 返回 key 中字符串值的子字符
     */
    @GetMapping("get/range")
    public String getRange(String key){
        return redisValueOpe.getRange(key,1,3);
    }

    /**
     * 将给定 key 的值设为 value ,并返回 key 的旧值(old value)
     */ 
    @GetMapping("getAndSet")
    public String getAndSet(String key, String value){
        return redisValueOpe.getAndSet(key,value);
    }
    
    /**
     * 批量获取
     */
    @GetMapping("multiGet")
    public List<Object> multiGet(String key1, String key2){
        return redisValueOpe.multiGet(Arrays.asList(key1,key2));
    }

    /**
     * 只有在 key 不存在时设置 key 的值
     * @return 之前已经存在返回false,不存在返回true
     */    
    @GetMapping("setIfAbsent")
    public  Boolean setIfAbsent(String key, String value) {
        return redisValueOpe.setIfAbsent(key, value);
    }

    /**
     * 批量添加
     * @param maps
     */  
    @GetMapping("multiSet")
    public void multiSet() {
        Map<String, Object> maps=new HashMap<>(2);
        maps.put("aa","bb");
        maps.put("temprature",23);
        redisValueOpe.multiSet(maps);
    }
    
    /**
     * 增加(自增长), 负数则为自减
     * value 必须为数值型数据
     */
    @GetMapping("incrBy")
    public Long incrBy(String key, long increment) {
        return redisValueOpe.incrBy(key, increment);
    }
    
    /**
     * 浮点自增
     */
    @GetMapping("incrByFloat")
    public Double incrByFloat(String key, double increment) {
        return redisValueOpe.incrByFloat(key, increment);
    }

    /**
     * 追加到末尾
     */    
    @GetMapping("append")
    public Integer append(String key, String value) {
        return redisValueOpe.append(key, value);
    }

}

RedisTemplate操作示例

@RestController
@RequestMapping("temp")
@RequiredArgsConstructor
public class TemplateController {

    private final RedisTemplateOpe redisTemplateOpe;

    /**
     * 删除key
     */    
    @GetMapping("delete")
    public Boolean delete(String key) {
        Boolean delete = redisTemplateOpe.delete(key);
        return delete;
    }
    
    /**
     * 是否存在key
     */
    @GetMapping("hasKey")
    public Boolean hasKey(String key) {
        return redisTemplateOpe.hasKey(key);
    }

    /**
     * 设置过期时间
     */    
    @GetMapping("expire")
    public Boolean expire(String key) {
        return redisTemplateOpe.expire(key, 10, TimeUnit.DAYS);
    }

    /**
     * 查找匹配的key
     */    
    @GetMapping("keys")
    public Set<String> keys(String pattern) {
        return redisTemplateOpe.keys(pattern);
    }

}