1. 首页
  2. IT资讯

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

 

发布了69 篇原创文章 · 获赞 45 · 访问量 21万+

原文始发于:

主题测试文章,只做测试使用。发布者:逗乐男神i,转转请注明出处:http://www.cxybcw.com/144867.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code