• spring-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设置有效时长的单位为小时

    转自:https://www.cnblogs.com/baizhanshi/p/5527467.html

  • 相关阅读:
    Android学习之多线程开发总结<二>
    Android学习之多线程开发总结<一>
    Android代码模版整理<一>
    Android学习之Bluetooth开发总结<续3>
    Android学习—自定义组件
    Android学习之解析XML
    Android学习—自定义对话框Dialog
    Android学习之Bluetooth开发总结<续2>
    Android学习之Bluetooth开发总结<续>
    .Net Core 发布项目时出现警告提示“不建议指定此包的版本”的解决办法
  • 原文地址:https://www.cnblogs.com/flywang/p/8390981.html
Copyright © 2020-2023  润新知