spring-boot 整合 redis

导入依赖:

<!--redis-->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-redis</artifactId>
   <version>1.5.6.RELEASE</version>
</dependency>

存储String数据类型接口:

package com.test.redis;

/**
 * 封装redisTemplate对字符串处理接口
 * @description 
 * @author Liuyh
 * @date 2018年4月19日 上午10:15:30
 */
public interface IStringCache {

   /**
    * 如果key已经存在且是一个字符串,APPEND命令将value追加到原来的值的末尾. 如果key不存在,APPEND就简单的将给定key设置为value
    * 
    * @description
    * @author Liuyh
    * @date 2018年4月19日上午10:11:28
    * @param key
    * @param value
    * @return 追加value后,字符串的长度
    */
   Integer stringAppendString(String key, String value);

   /**
    * 获取指定键的值
    * 
    * @description
    * @author Liuyh
    * @date 2018年4月19日上午10:12:35
    * @param key
    * @return
    */
   String stringGetStringByKey(String key);

   /**
    * 获取存储在键上的字符串的子字符串
    * 
    * @description
    * @author Liuyh
    * @date 2018年4月19日上午10:12:43
    * @param key
    * @param start
    * @param end
    * @return 截取后的字符串
    */
   String stringGetSubStringFromString(String key, long start, long end);

   /**
    * 将键的整数值按给定的长整型数值增加
    * 
    * @description
    * @author Liuyh
    * @date 2018年4月19日上午10:13:03
    * @param key
    * @param delta
    * @return 增长后的结果集
    */
   Long stringIncrementLongString(String key, Long delta);

   /**
    * 键的整数值按给定的浮点型数值增加
    * 
    * @description
    * @author Liuyh
    * @date 2018年4月19日上午10:13:32
    * @param key
    * @param delta
    * @return 增长后的结果集
    */
   Double stringIncrementDoubleString(String key, Double delta);

   /**
    * 设置指定键的值
    * 
    * @description
    * @author Liuyh
    * @date 2018年4月19日上午10:13:53
    * @param key
    * @param value
    */
   void stringSetString(String key, String value);

   /**
    * 设置键的字符串值并返回其旧值
    * 
    * @description
    * @author Liuyh
    * @date 2018年4月19日上午10:14:03
    * @param key
    * @param value
    * @return
    */
   String stringGetAndSet(String key, String value);

   /**
    * 使用键和到期时间来设置值,时间单位默认为毫秒
    * 
    * @description
    * @author Liuyh
    * @date 2018年4月19日上午10:14:22
    * @param key
    * @param value
    * @param timeout
    */
   void stringSetValueAndExpireTime(String key, String value, long timeout);
}

存储Set数据类型接口:

package com.test.redis;

import java.util.Set;

/**
 * 封装redisTemplate对set处理接口
 * @description 
 * @author Liuyh
 * @date 2018年4月19日 上午10:16:13
 */
public interface ISetCache {
   /**
    * 将一个或多个 value 元素加入到集合 key 当中,已经存在于集合的 value 元素将被忽略。
    * 
    * @description
    * @author Liuyh
    * @date 2018年4月19日上午10:10:39
    * @param key
    * @param values
    * @return 被添加到集合中的新元素的数量,不包括被忽略的元素
    */
   Long setAddSetMap(String key, String... values);

   /**
    * 获取set集合的大小
    * 
    * @description
    * @author Liuyh
    * @date 2018年4月19日上午10:11:00
    * @param key
    * @return
    */
   Long setGetSizeForSetMap(String key);

   /**
    * 获取set集合中的元素
    * 
    * @description
    * @author Liuyh
    * @date 2018年4月19日上午10:11:06
    * @param key
    * @return
    */
   Set<String> setGetMemberOfSetMap(String key);

   /**
    * 检查元素是不是set集合中的
    * 
    * @description
    * @author Liuyh
    * @date 2018年4月19日上午10:11:12
    * @param key
    * @param o
    * @return
    */
   boolean setCheckIsMemberOfSet(String key, Object o);
}

存储List数据类型接口:

package com.test.redis;

import java.util.List;

/**
 * 封装redisTemplate对list处理接口
 * @description 
 * @author Liuyh
 * @date 2018年4月19日 上午10:16:52
 */
public interface IListCache {
   /**
    * 从右向左存压栈
    * @description 
    * @author Liuyh
    * @date 2018年4月19日上午10:09:06
    * @param key
    * @param value
    */
   void listRightPushList(String key, String value);

   /**
    * 从右出栈
    * @description 
    * @author Liuyh
    * @date 2018年4月19日上午10:09:21
    * @param key
    * @return
    */
   String listRightPopList(String key);

   /**
    * 从左向右存压栈
    * @description 
    * @author Liuyh
    * @date 2018年4月19日上午10:09:28
    * @param key
    * @param value
    */
   void listLeftPushList(String key, String value);

   /**
    * 从左出栈
    * @description 
    * @author Liuyh
    * @date 2018年4月19日上午10:09:35
    * @param key
    * @return
    */
   String listLeftPopList(String key);

   /**
    * 集合list的长度
    * @description 
    * @author Liuyh
    * @date 2018年4月19日上午10:09:43
    * @param key
    * @return
    */
   Long listSize(String key);

   /**
    * 查询列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定。
    * @description 
    * @author Liuyh
    * @date 2018年4月19日上午10:09:49
    * @param key
    * @param start
    * @param end
    * @return
    */
   List<String> listRangeList(String key, Long start, Long end);

   /**
    * 移除key中值为value的i个,返回删除的个数;如果没有这个元素则返回0
    * @description 
    * @author Liuyh
    * @date 2018年4月19日上午10:09:59
    * @param key
    * @param i
    * @param value
    * @return
    */
   Long listRemoveFromList(String key, long i, Object value);

   /**
    * 根据下标查询list中某个值
    * @description 
    * @author Liuyh
    * @date 2018年4月19日上午10:10:05
    * @param key
    * @param index
    * @return
    */
   String listIndexFromList(String key, long index);

   /**
    * 根据下标设置value
    * @description 
    * @author Liuyh
    * @date 2018年4月19日上午10:10:20
    * @param key
    * @param index
    * @param value
    */
   void listSetValueToList(String key, long index, String value);

   /**
    * 裁剪(删除), 删除 除了[start,end]以外的所有元素
    * @description 
    * @author Liuyh
    * @date 2018年4月19日上午10:10:30
    * @param key
    * @param start
    * @param end
    */
   void listTrimByRange(String key, Long start, Long end);
}

存储Hash类型数据接口:

package com.test.redis;

import java.util.List;
import java.util.Map;
import java.util.Set;

public interface IHashCache {
   /**
    * 查看哈希表hKey中,给定域hashKey是否存在
    * 
    * @description
    * @author Liuyh
    * @date 2018年4月19日上午9:56:56
    * @param hKey
    * @param hashKey
    * @return
    */
   boolean hashCheckHxists(String hKey, String hashKey);

   /**
    * 查看哈希表hKey中,给定域hashKey的值
    * 
    * @description
    * @author Liuyh
    * @date 2018年4月19日上午10:00:03
    * @param hKey
    * @param hashKey
    * @return
    */
   <T> T hashGet(String hKey, String hashKey);

   /**
    * 获取所有的散列值
    * 
    * @description
    * @author Liuyh
    * @date 2018年4月19日上午10:00:32
    * @param key
    * @return
    */
   Map<Object, Object> hashGetAll(String key);

   /**
    * 哈希表hKey中的域hashKey的值加上增量delta
    * 
    * @description 增量可以为负数 如果hKey不存在,会创建一个新的hash并执行HINCRBY命令.
    *              如果hashKey不存在,会在执行前初始化一个0 如果hashKey的值时字符串,会报错
    *              返回返回hKey中hashKey的当前值
    * @author Liuyh
    * @date 2018年4月19日上午10:02:18
    * @param hKey
    * @param hashKey
    * @param delta
    * @return
    */
   Long hashIncrementLongOfHashMap(String hKey, String hashKey, Long delta);

   /**
    * 哈希表hKey中的域hashKey的值加上浮点型增量delta
    * 
    * @description
    * @author Liuyh
    * @date 2018年4月19日上午10:05:09
    * @param hKey
    * @param hashKey
    * @param delta
    * @return
    */
   Double hashIncrementDoubleOfHashMap(String hKey, String hashKey, Double delta);

   /**
    * 添加键值对到哈希表key中
    * 
    * @description
    * @author Liuyh
    * @date 2018年4月19日上午10:05:42
    * @param key
    * @param hashKey
    * @param value
    */
   void hashPushHashMap(String key, Object hashKey, Object value);

   /**
    * 获取哈希表key中的所有域
    * 
    * @description
    * @author Liuyh
    * @date 2018年4月19日上午10:08:18
    * @param key
    * @return
    */
   Set<Object> hashGetAllHashKey(String key);

   /**
    * 获取散列中的字段数量
    * 
    * @description
    * @author Liuyh
    * @date 2018年4月19日上午10:08:30
    * @param key
    * @return
    */
   Long hashGetHashMapSize(String key);

   /**
    * 获取哈希中的所有值
    * 
    * @description
    * @author Liuyh
    * @date 2018年4月19日上午10:08:39
    * @param key
    * @return
    */
   List<Object> hashGetHashAllValues(String key);

   /**
    * 删除一个或多个哈希字段
    * 
    * @description
    * @author Liuyh
    * @date 2018年4月19日上午10:08:49
    * @param key
    * @param hashKeys
    * @return 被成功删除的数量
    */
   Long hashDeleteHashKey(String key, Object... hashKeys);
}

接口太凌乱,整理一下吧!

package com.test.redis;

import java.util.Collection;

/**
 * 封装redisTemplate公用处理接口
 * @description 
 * @author Liuyh
 * @date 2018年4月19日 上午10:18:41
 */
public interface ICache extends IStringCache,ISetCache,IListCache,IHashCache{
   /**
    * 删除键为key的缓存(hash/set/list/string)
    * 
    * @description
    * @author Liuyh
    * @date 2018年4月19日上午9:56:24
    * @param key
    */
   void deleteFromRedis(String key);
   
   /**
    * 删除键为key的缓存(hash/set/list/string)
    * @description 
    * @author Liuyh
    * @date 2018年4月19日上午10:22:09
    * @param keys
    */
   void deleteFromRedis(Collection<String> keys);
}

核心:

package com.test.redis;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;

/**
 * 
 * @description
 * @author Liuyh
 * @date 2018年4月19日 上午9:44:52
 * @param <K>
 *            键类型
 * @param <V>
 *            值类型
 */
@Component
public class Cache implements ICache {

   @Autowired
   private RedisTemplate<String, String> redisTemplate;

   @Override
   public Integer stringAppendString(String key, String value) {
      return redisTemplate.opsForValue().append(key, value);
   }

   @Override
   public String stringGetStringByKey(String key) {
      return redisTemplate.opsForValue().get(key);
   }

   @Override
   public String stringGetSubStringFromString(String key, long start, long end) {
      return redisTemplate.opsForValue().get(key, start, end);
   }

   @Override
   public Long stringIncrementLongString(String key, Long delta) {
      return redisTemplate.opsForValue().increment(key, delta);
   }

   @Override
   public Double stringIncrementDoubleString(String key, Double delta) {
      return redisTemplate.opsForValue().increment(key, delta);
   }

   @Override
   public void stringSetString(String key, String value) {
      redisTemplate.opsForValue().set(key, value);
   }

   @Override
   public String stringGetAndSet(String key, String value) {
      return redisTemplate.opsForValue().getAndSet(key, value);
   }

   @Override
   public void stringSetValueAndExpireTime(String key, String value, long timeout) {
      redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.MILLISECONDS);
   }

   @Override
   public Long setAddSetMap(String key, String... values) {
      return redisTemplate.opsForSet().add(key, values);
   }

   @Override
   public Long setGetSizeForSetMap(String key) {
      return redisTemplate.opsForSet().size(key);
   }

   @Override
   public Set<String> setGetMemberOfSetMap(String key) {
      return redisTemplate.opsForSet().members(key);
   }

   @Override
   public boolean setCheckIsMemberOfSet(String key, Object o) {
      return redisTemplate.opsForSet().isMember(key, o);
   }

   @Override
   public void listRightPushList(String key, String value) {
      redisTemplate.opsForList().rightPush(key, value);
   }

   @Override
   public String listRightPopList(String key) {
      return redisTemplate.opsForList().rightPop(key);
   }

   @Override
   public void listLeftPushList(String key, String value) {
      redisTemplate.opsForList().leftPush(key, value);
   }

   @Override
   public String listLeftPopList(String key) {
      return redisTemplate.opsForList().leftPop(key);
   }

   @Override
   public Long listSize(String key) {
      return redisTemplate.opsForList().size(key);
   }

   @Override
   public List<String> listRangeList(String key, Long start, Long end) {
      return redisTemplate.opsForList().range(key, start, end);
   }

   @Override
   public Long listRemoveFromList(String key, long i, Object value) {
      return redisTemplate.opsForList().remove(key, i, value);
   }

   @Override
   public String listIndexFromList(String key, long index) {
      return redisTemplate.opsForList().index(key, index);
   }

   @Override
   public void listSetValueToList(String key, long index, String value) {
      redisTemplate.opsForList().set(key, index, value);
   }

   @Override
   public void listTrimByRange(String key, Long start, Long end) {
      redisTemplate.opsForList().trim(key, start, end);
   }

   @Override
   public boolean hashCheckHxists(String hKey, String hashKey) {
      return redisTemplate.opsForHash().hasKey(hKey, hashKey);
   }

   @SuppressWarnings("unchecked")
   @Override
   public <T> T hashGet(String hKey, String hashKey) {
      return (T) redisTemplate.opsForHash().get(hKey, hashKey);
   }

   @Override
   public Map<Object, Object> hashGetAll(String key) {
      return redisTemplate.opsForHash().entries(key);
   }

   @Override
   public Long hashIncrementLongOfHashMap(String hKey, String hashKey, Long delta) {
      return redisTemplate.opsForHash().increment(hKey, hashKey, delta);
   }

   @Override
   public Double hashIncrementDoubleOfHashMap(String hKey, String hashKey, Double delta) {
      return redisTemplate.opsForHash().increment(hKey, hashKey, delta);
   }

   @Override
   public void hashPushHashMap(String key, Object hashKey, Object value) {
      redisTemplate.opsForHash().put(key, hashKey, value);
   }

   @Override
   public Set<Object> hashGetAllHashKey(String key) {
      return redisTemplate.opsForHash().keys(key);
   }

   @Override
   public Long hashGetHashMapSize(String key) {
      return redisTemplate.opsForHash().size(key);
   }

   @Override
   public List<Object> hashGetHashAllValues(String key) {
      return redisTemplate.opsForHash().values(key);
   }

   @Override
   public Long hashDeleteHashKey(String key, Object... hashKeys) {
      return redisTemplate.opsForHash().delete(key, hashKeys);
   }

   @Override
   public void deleteFromRedis(String key) {
      redisTemplate.delete(key);
   }

   @Override
   public void deleteFromRedis(Collection<String> keys) {
      redisTemplate.delete(keys);
   }
}

测试类:

package com.test.controller;

import com.test.redis.Cache;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(value = "web")
public class WebController {

    @Autowired
    private Cache cache;

    @RequestMapping(value = "getName",method = RequestMethod.GET)
    public String getName(String name){
        System.out.println(name);
        return name;
    }

    @RequestMapping(value = "redisAdd",method = RequestMethod.GET)
    public void redisAddName(String name){
        System.out.println(name);
        cache.stringSetValueAndExpireTime("name",name,20*1000);
    }
} 

项目地址:https://github.com/ShiLinDang/spring-boot2.git

https://github.com/ShiLinDang/spring-boot2.git

猜你喜欢

转载自blog.csdn.net/qq_40074764/article/details/80691673