1.概述

在项目中使用redis缓存万量级的数据,如果只是用普通的方式进行缓存数据会非常耗时

private void addSetMembers(String key, List<String> values) {for (String value: values) {stringRedisTemplate.opsForSet().add(key, value);}}

2.分析

之所以慢的原因就是如果数据是1万条,add方法就会执行1万次,也就是产生1万次的web服务器与redis的通信连接,每次通信往返大概耗时1毫秒,因此1万次通信就是10秒10万次就是100秒数据量与耗时成正比。因此解决这个问题最直接的方案就是减少通信次数。而redis的pipeline正好可以用来减少与redis的通信。

3.代码

public void addSetMembers(String key, List<String> values) {//开启管道stringRedisTemplate.executePipelined((RedisCallback<List<String>>) connection -> {for (String value: values) {//添加执行命令connection.setCommands().sAdd(key.getBytes(), value.getBytes());}return null;});}

4.比较分析

使用pipeline之后,缓存速度有了显著的提升。
以下是 Redis实战 一书中的数据,可以作为参考:

调用pipeline的方法很明显比普通的方法快好几倍

5.小结

redis的pipeline可以减少web服务器与redis的通信次数,同样地,redis的multi和exec命令也能够减少通信次数。只不过后者是事务型的,前者是非事务的,事务会消耗一定的资源并且会阻塞其他的命令,所以在不需要保证事务的情况下pipeline可以带来更好的性能

redis 保存大量数据相关推荐

  1. 14 Redis 保存时间序列数据

    14 Redis 保存时间序列数据 前言 一.时间序列数据的读写特点 二.基于 Hash 和 Sorted Set 保存时间序列数据 三.基于 RedisTimeSeries 模块保存时间序列数据 总 ...

  2. 这么设计,Redis 10亿数据量只需要100MB内存

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:www.toutiao.com/i676764283 ...

  3. 使用Spring操作Redis的key-value数据

    前言 最近工作一直忙的不可开交,小Alan已经很久没有和大家分享知识了,在深圳待了两年多,依然感觉自己还是个小菜鸟,工作中还是会遇到很多自己在短期内无法搞定的事情,每当这个时候总是会感觉到很沮丧,就会 ...

  4. laravel用redis保存session遇到的坑,没报错,但redis-cli就是查不到

    laravel用redis保存session遇到的坑, 配置redis存储session流程是这样的 在.evn文件中把session驱动和连接改为了redis的 如下: SESSION_DRIVER ...

  5. Redis 10亿数据量只需要100MB内存,为什么这么牛?

    作者:java架构设计   来源:toutiao.com/i6767642839267410445 本文主要和大家分享一下redis的高级特性:bit位操作. 力求让大家彻底学会使用redis的bit ...

  6. redis保存dataset

    公司统一走redis缓存,也将之前的memcache迁移到redis 碰到问题是redis的dataset缓存. memcache底层封装了dataset的序列化. 而redis引的DLL包,未支持. ...

  7. redis 保存 array list 区别_为什么Redis的RDB备份不用多线程实现CopyOnWrite?

    前言 这篇文章源于我昨天看到的一个有意思的问题. 快照持久化是个很耗时间的操作,而Redis采用fork一个子进程出来进行持久化.理论而言,fork出来的子进程会拷贝父进程所有的数据,这样当Redis ...

  8. 处理Redis里的数据

    处理Redis里的数据 有缘网的数据爬回来了,但是放在Redis里没有处理.之前我们配置文件里面没有定制自己的ITEM_PIPELINES,而是使用了RedisPipeline,所以现在这些数据都被保 ...

  9. [转载] python怎么获取redis中的数据_python操作redis数据库

    参考链接: 使用Python在Selenium中进行非阻塞等待 3.redis基本命令 String set(name, value, ex=None, px=None, nx=False, xx=F ...

最新文章

  1. jquery版本冲突问题
  2. 一个简单的Ajax例子
  3. 车联网大数据框架_FEV:基于最新网关技术管理车联网大数据
  4. 关于系统性能检测的一些使用
  5. php 提取字段为key,从一个serialize过的array的字符串中取出中取对应KEY的value
  6. 如何为物联网选择微控制器?
  7. JSP的自定义标签(五)之Tag File
  8. Tomcat优化详细教程
  9. 计算机教师课改先进个人,基础教育课程改革工作先进个人事迹
  10. python模拟鼠标键盘原理_Python-模拟鼠标键盘动作
  11. C/C++程序员的编程修养
  12. access 和SQL有什么不同
  13. 请打开正确的提问方式
  14. 今日头条用户文章标题及详情页爬取
  15. Power BI学习笔记
  16. Photoshop CC 2017 For Mac安装教程
  17. 【转载】SAP ABAP内表OCCURS,WORK AREA等 语法对比
  18. 不小心删除了文件能恢复吗 误删除文件怎么找回
  19. WADCC明确使命:驱动全球价值互联网国际间联盟
  20. 【转载】Iptables详解

热门文章

  1. QQ邮箱开通exchange的方法
  2. 三种命名规则之-----骆驼命名法
  3. 华为HCIE证书含金量
  4. 零知识证明 SNARKs C++库:libsnark教程
  5. Flume+kafka+Spark Steaming demo2
  6. mac怎么更新python_mac上更新python的方法
  7. element-ui版本更新兼容问题
  8. 手把手教你入门第一步!做西瓜头条自媒体,每天稳定收入200多
  9. 今日头条用户搜索“室内设计”显示的自媒体粉丝数量及分布情况统计(2020.1.8)
  10. LeetCode刷题|36有效的数独