@Autowired
private RedisTemplate<String, String> redisTemplate; @Override
public List<String> getCachedList(String key)
{
Long size = getCachedListSize(key);
Long end = size - 1;
return getCachedListByRange(key,0L,end);
} @Override
public Long getCachedListSize(String key)
{
return redisTemplate.opsForList().size(key);
} @Override
public List<String> getCachedListByRange(String key, Long start, Long end)
{
return redisTemplate.opsForList().range(key,start,end);
} @Override
public <T> List<T> getCachedList(List<String> jsons, Class<T> targetClass)
{
if(CollectionUtils.isEmpty(jsons))
{
return Collections.emptyList();
}
return jsons.stream().map(json->JSON.parseObject(json,targetClass)).collect(Collectors.toCollection(LinkedList::new));
} @Override
public <T> List<T> getCachedList(String snapshotKey, String ipAddr, final Predicate<? super T> filter, Class<T> targetClass)
{
List<T> list = getCachedList(snapshotKey,ipAddr, targetClass); if(CollectionUtils.isEmpty(list))
{
return Collections.emptyList();
}
return list.parallelStream().filter(filter).collect(Collectors.toList());
}

hash操作

    @Override
public <T> Map<String,T> getCachedKV(String cachedKey, String hashKey, Long nodeId, Class<T> targetClass)
{
String statusId = String.format("%s:nodeId%d", cachedKey,nodeId); List<Map<String,T>> list = getCachedKV(statusId,targetClass);
if(CollectionUtils.isEmpty(list))
{
return Collections.emptyMap();
}
Optional<Map<String, T>> matched = list.stream().filter(map -> {
return map.keySet().contains(hashKey);
}).findFirst(); if(matched.isPresent()) {
return matched.get();
}
return Collections.emptyMap();
}
@Override
public <T> List<Map<String,T>> getCachedKV(String cachedId, Class<T> targetClass)
{
Map<Object, Object> memCached = redisTemplate.opsForHash().entries(cachedId);
if (MapUtils.isEmpty(memCached)) {
return Collections.emptyList();
}
List<Map<String,T>> list = new LinkedList<Map<String,T>>(); for(Map.Entry<Object,Object> entry:memCached.entrySet())
{
String key = (String)entry.getKey();
String json = (String)entry.getValue();
list.add(Collections.singletonMap(key,JSON.parseObject(json,targetClass)));
}
return list;
} @Override
public <T> T getStatus(String statusKey, String hashKey, Long nodeId, Class<T> targetClass)
{
Map<String, T> result = getCachedKV(statusKey, hashKey, nodeId, targetClass); if(!result.isEmpty())
{
Optional<T> entity = result.values().stream().findFirst();
if(entity.isPresent())
{
return entity.get();
}
} return null;
} @Override
public <T> T getCachedObjectFromList(String cacheId, Class<T> targetClass)
{
List<T> list = new LinkedList<>(); Map<Object, Object> memCached = redisTemplate.opsForHash().entries(cacheId); Optional<String> matched = memCached.values().stream().map(String::valueOf).findFirst();
if(matched.isPresent())
{
String json = matched.get();
return JSON.parseObject(json,targetClass);
}
return null;
} @Override
public List<SnmpNode> getCachedNodes()
{
return getHashValues(CACHED_NODE,SnmpNode.class);
} @Override
public <T> List<T> getHashValues(String cacheId, Class<T> targetClass)
{
List<T> list = new LinkedList<>(); Map<Object, Object> memCached = redisTemplate.opsForHash().entries(cacheId);
if(MapUtils.isEmpty(memCached))
{
return Collections.synchronizedList(Collections.emptyList());
} for (Map.Entry<Object, Object> entry : memCached.entrySet()) {
String key = (String) entry.getKey();
String json = (String) entry.getValue();
T instance = JSON.parseObject(json,targetClass);
log.debug("list@{}查询到的数据,key:{},val:{}",cacheId,key,json);
list.add(instance);
}
return list;
}

Spring RedisTemplate常用方法(List,Hash)的更多相关文章

  1. spring redistemplate中setHashValueSerializer的设置

    笔者曾经对redis键值使用了不同类型的序列化方法 用过默认值.JdkSerializationRedisSerializer.StringRedisSerializer还用改以下自定类型的序列化工具 ...

  2. Spring RedisTemplate操作-xml配置(1)

    网上没能找到全的spring redistemplate操作例子,故特意化了点时间做了接口调用练习,基本包含了所有redistemplate方法. 该操作例子是个系列,该片为spring xml配置, ...

  3. 曹工说Spring Boot源码(20)-- 码网灰灰,疏而不漏,如何记录Spring RedisTemplate每次操作日志

    写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...

  4. Spring JDBC常用方法详细示例

    Spring JDBC使用简单,代码简洁明了,非常适合快速开发的小型项目.下面对开发中常用的增删改查等方法逐一示例说明使用方法 1 环境准备 启动MySQL, 创建一个名为test的数据库 创建Mav ...

  5. spring RedisTemplate的使用(一)--xml配置或JavaConfig配置

    1.xml配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="h ...

  6. Spring RedisTemplate操作-事务操作(9)

    @Autowired @Qualifier("redisTemplate") private RedisTemplate<String, String> stringr ...

  7. Spring RedisTemplate操作-发布订阅操作(8)

    @Component("sub") public class Sub implements MessageListener{ @Autowired private StringRe ...

  8. [BZOJ 3198] [Sdoi2013] spring 【容斥 + Hash】

    题目链接:BZOJ - 3198 题目分析 题目要求求出有多少对泉有恰好 k 个值相等. 我们用容斥来做. 枚举 2^6 种状态,某一位是 1 表示这一位相同,那么假设 1 的个数为 x . 答案就是 ...

  9. Spring RedisTemplate操作-序列化性能测试(12)

    @Autowired @Qualifier("redisTemplate") private RedisTemplate<String, String> stringr ...

随机推荐

  1. java线程基础巩固---线程生产者消费者的综合实战结合Java8语法

    基于上一次[http://www.cnblogs.com/webor2006/p/8909558.html]学习的多个生产者与多个消费者模型,此次用另外一个案例来进一步巩固线程之间的调度处理,这里还是 ...

  2. 数据库允许空值(null),往往是悲剧的开始(1分钟系列)

    数据库字段允许空值,会遇到一些问题,此处包含的一些知识点,和大家聊一聊. 数据准备: create table user ( id int, name varchar(20), index(id) ) ...

  3. python+Appium自动化:记录遇到的坑

    1.打开 uiautomatorviewer同步的的时候突然报错 Error while obtaining UI hierarchy XML file: com.android.ddmlib.Syn ...

  4. JAVA WEB之Servlet使用

    3. JSP提交数据和Servlet程序设计 想要将JSP数据提交,主要的方法有form表单方式.url方式和Session方式.将JSP数据传递给后台,form表单显然比较简单方便. 正如上一节中展 ...

  5. MySQL的分表与分区

    MySQL分表分区是解决大数据量导致MySQL性能低下的两种方法. 什么是MySQL分表 从表面意思上看,MySQL分表就是将一个表分成多个表,数据和数据结构都有可能会变.MySQL分表分为垂直分表和 ...

  6. 查看hive的信息

    一.Hive下查看数据表信息的方法方法1:查看表的字段信息desc table_name; 方法2:查看表的字段信息及元数据存储路径desc extended table_name; 方法3:查看表的 ...

  7. hdu 6059 Kanade's trio

    题 OwO http://acm.hdu.edu.cn/showproblem.php?pid=6059 解 由于每个数字最多是30位,枚举数字每一位考虑, 建一棵记录前缀(位的前缀,比如10拆成10 ...

  8. removeProp(name)

    removeProp(name) 概述 用来删除由.prop()方法设置的属性集 随着一些内置属性的DOM元素或window对象,如果试图将删除该属性,浏览器可能会产生错误.jQuery第一次分配un ...

  9. VS2015 注释英文

    在VS2015中,框架.NET4.5的智能提示是英文版本的,其实修改的方法很简单,手动改也十分方面,但是考虑到有时候更新后又会变成英文,其实无非就是里面的汉化包是英文版的而已.所以还是留个笔记,方便进 ...

  10. Qbxt AH d4 && day-6

    /* 这两天考试直接呵呵了. 赶脚对qbxt的题目无感. 同时也发现了自己的一些问题. 一些思路题总是自己傻逼的挖个坑跳进去. 这两天场场倒数ORZ. 始终是最弱的.... 然后NOIP光荣三等奖了吧 ...