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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_27409289/article/details/89882976

因为项目上需要用到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");

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

猜你喜欢

转载自blog.csdn.net/qq_27409289/article/details/89882976