redis 几种数据类型往数据库存数据和取数据的帮助类
- package com.fndsoft.bcis.utils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.data.redis.core.*;
- import org.springframework.stereotype.Service;
- import java.util.*;
- /**
- * redis缓存帮助类
- * Created by DELL on 2016/5/23.
- */
- @Service
- public class RedisCacheUtil<T> {
- @Autowired
- public RedisTemplate redisTemplate;
- /**
- * 缓存基本的对象,Integer、String、实体类等
- *
- * @param key 缓存的键值
- * @param value 缓存的值
- * @return 缓存的对象
- */
- public <T> ValueOperations<String, T> setCacheObject(String key, T value) {
- ValueOperations<String, T> operation = redisTemplate.opsForValue();
- operation.set(key, value);
- return operation;
- }
- /**
- * 获得缓存的基本对象。
- *
- * @param key 缓存键值
- * @return 缓存键值对应的数据
- */
- public <T> T getCacheObject(String key) {
- ValueOperations<String, T> operation = redisTemplate.opsForValue();
- return operation.get(key);
- }
- /**
- * 缓存List数据
- *
- * @param key 缓存的键值
- * @param dataList 待缓存的List数据
- * @return 缓存的对象
- */
- public <T> ListOperations<String, T> setCacheList(String key, List<T> dataList) {
- ListOperations listOperation = redisTemplate.opsForList();
- if (null != dataList) {
- int size = dataList.size();
- for (int i = 0; i < size; i++) {
- listOperation.leftPush(key, dataList.get(i));
- }
- }
- return listOperation;
- }
- /**
- * 获得缓存的list对象
- *
- * @param key 缓存的键值
- * @return 缓存键值对应的数据
- */
- public <T> List<T> getCacheList(String key) {
- List<T> dataList = new ArrayList<T>();
- ListOperations<String, T> listOperation = redisTemplate.opsForList();
- Long size = listOperation.size(key);
- for (int i = 0; i < size; i++) {
- dataList.add(listOperation.index(key,i));
- }
- return dataList;
- }
- /**
- * 缓存Set
- *
- * @param key 缓存键值
- * @param dataSet 缓存的数据
- * @return 缓存数据的对象
- */
- public <T> BoundSetOperations<String, T> setCacheSet(String key, Set<T> dataSet) {
- BoundSetOperations<String, T> setOperation = redisTemplate.boundSetOps(key);
- Iterator<T> it = dataSet.iterator();
- while (it.hasNext()) {
- setOperation.add(it.next());
- }
- return setOperation;
- }
- /**
- * 获得缓存的set
- *
- * @param key
- * @return
- */
- public Set<T> getCacheSet(String key) {
- Set<T> dataSet = new HashSet<T>();
- BoundSetOperations<String, T> operation = redisTemplate.boundSetOps(key);
- Long size = operation.size();
- for (int i = 0; i < size; i++) {
- dataSet.add(operation.pop());
- }
- return dataSet;
- }
- /**
- * 缓存Map
- *
- * @param key
- * @param dataMap
- * @return
- */
- public <T> HashOperations<String, String, T> setCacheMap(String key, Map<String, T> dataMap) {
- HashOperations hashOperations = redisTemplate.opsForHash();
- if (null != dataMap) {
- for (Map.Entry<String, T> entry : dataMap.entrySet()) {
- hashOperations.put(key, entry.getKey(), entry.getValue());
- }
- }
- return hashOperations;
- }
- /**
- * 获得缓存的Map
- *
- * @param key
- * @return
- */
- public <T> Map<String, T> getCacheMap(String key) {
- Map<String, T> map = redisTemplate.opsForHash().entries(key);
- return map;
- }
- /**
- * 缓存Map
- *
- * @param key
- * @param dataMap
- * @return
- */
- public <T> HashOperations<String, Integer, T> setCacheIntegerMap(String key, Map<Integer, T> dataMap) {
- HashOperations hashOperations = redisTemplate.opsForHash();
- if (null != dataMap) {
- for (Map.Entry<Integer, T> entry : dataMap.entrySet()) {
- hashOperations.put(key, entry.getKey(), entry.getValue());
- }
- }
- return hashOperations;
- }
- /**
- * 获得缓存的Map
- *
- * @param key
- * @return
- */
- public <T> Map<Integer, T> getCacheIntegerMap(String key) {
- Map<Integer, T> map = redisTemplate.opsForHash().entries(key);
- return map;
- }
- }
以下是存储list对象的测试方法:
- /**
- * redis缓存list对象
- */
- @Test
- public void setCatchValueForList() {
- String key = "user_Test7";
- List<Code> codeList = new ArrayList<>();
- Code code1 = new Code("436436", 533);
- Code code2 = new Code("214214", 53453);
- codeList.add(code1);
- codeList.add(code2);
- redisCacheUtil.setCacheList(key, codeList);
- System.out.println("保存数据成功!");
- }
- @Test
- public void getValueForList() {
- String key = "user_Test7";
- List<Code> codeList = redisCacheUtil.getCacheList(key);
- for (Code code : codeList) {
- System.out.println(code.getName() + " " + code.getAge());
- }
- }
切记被缓存的实例化对象必须系列化:
- public class Code implements Serializable {}
另外还可以对将要保存的key设置有效时间,超过此有效时间,该key会自动删除失效:
- redisTemplate.expire(key, 1, TimeUnit.HOURS);//此处TimeUnit.HOURS设置有效时长的单位为小时