redistemplate 批量读取_springboot中 redisTemplate批量插入/读取hash数据

本文介绍在SpringBoot项目中,如何利用RedisTemplate进行Hash结构数据的批量读取和插入,以提高性能。通过executePipelined方法实现批量存储,使用opsForHash的scan方法进行批量读取,以及获取单个key的值,从而优化对大量数据的处理。
摘要由CSDN通过智能技术生成

因为项目上需要用到redis缓存数据,并且量很大,但是频繁的单个获取或者插入非常消耗redis的性能,所以考虑是用hash结构的数据来做,并且使用批量的方式.

使用hash的优点:

1 数据可以类似于组的方式存储起来,并且也可以通过数据的唯一key值获取数据,这样获取同一类型的数据(组)和单个数据都是         非常方便的

2 适合存储对象

3 使用批量存储快

项目中集成的是 spring-data-redis看下相关的方法,发现没有提供批量存入数据的方法,只有putAll()方法和put()方法,

前者不支持获取单个组下面的数据,后者只能一个一个的存储,效率低下影响性能。

后面发现可以通过executePipelined(管道)进行批量存储并且也可以通过key获取单个对象的数据

话不多说上代码

批量存:redisTemplate.executePipelined(new RedisCallback>() { @Override public List doInRedis(RedisConnection connection) throws DataAccessException { for (CityModel cityModel : cityModels.subList(0,10)) { connection.hSet( STORE_CITY_INFO.getBytes(),cityModel.getCityID().toString().getBytes(), JSONHelper.toJson(cityModel).getBytes()); } return null; } });

通过游标获取(每次读取长度个匹配数据规则):Cursor> cursor = redisTemplate.opsForHash().scan(STORE_CITY_INFO, ScanOptions.scanOptions().count(1000).match("匹配规则").build()); while (cursor.hasNext()){ Map.Entry entry = cursor.next(); System.out.println("通过scan(H key, ScanOptions options)方法获取匹配键值对:" + entry.getKey() + "---->" + entry.getValue()); }

获得hash中单个keyredisTemplate.opsForHash().get(STORE_CITY_INFO,"key");

这样就实现了批量的读取和单个取

第二种批存储:RedisConnection connection=null; try{ connection = redisTemplate.getConnectionFactory().getConnection(); connection.hMSet(hashGroupKey.getBytes(),map); }catch (Exception e){ LogUtils.error("redis operate fail",e); }finally { if(connection!=null) connection.close(); }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值