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

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

使用hash的优点:

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

  2 适合存储对象

  3 使用批量存储快

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

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

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

话不多说上代码

批量存:

redisTemplate.executePipelined(new RedisCallback<List<CityModel>>() {
    @Override
    public List<CityModel> 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<Map.Entry<Object,Object>> cursor = redisTemplate.opsForHash().scan(STORE_CITY_INFO, ScanOptions.scanOptions().count(1000).match("匹配规则").build());
while (cursor.hasNext()){
    Map.Entry<Object,Object> entry = cursor.next();
    System.out.println("通过scan(H key, ScanOptions options)方法获取匹配键值对:" + entry.getKey() + "---->" + entry.getValue());
}

获得hash中单个key

redisTemplate.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();
}

 

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坑里水库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值