Redis

Redis 是一个开源的基于内存的数据结构存储器。通常可作为数据库,缓存和消息中介。它支持的数据结构有:字符串、哈希表、列表、集合、支持范围查询的有序集合、位图、hyperloglogs和带查询半径的地理空间索引。Redis有内置的复制、Lua脚本、LRU缓存、事务和不同层级的磁盘持久化功能,还通过Redis Sentinel提供了高可用性,通过Redis集群实现了自动化分割。

Pipeline

当业务需要发送多个相互独立的消息给redis,而不需要阻塞等待回答的时候,可以使用pipeline,将几个消息打包发送,这样可以减少网络的传输次数,提高性能。

#!/usr/bin/python3
import redis
import time key = 'Redis:Test'
num = 100 def test_with_out_pipeline(count=1):
r = redis.Redis(host='192.168.192.34',port=6379)
for i in range(num):
r.incr(key, count) def test_with_pipeline(count=1):
r = redis.Redis(host='192.168.192.34', port=6379)
pipe = r.pipeline()
for i in range(num):
pipe.incr(count)
res = pipe.execute()
return res def bench(desc):
start = time.clock()
desc()
end = time.clock()
cost = end - start
print("function {} cost {}".format(desc.__name__, str(cost))) if __name__ == '__main__':
bench(test_with_out_pipeline)
bench(test_with_pipeline)

使用场景,通过redis记录某种现象出现的次数,例如消费次数。pipline有优点,那就肯定有缺点,缺点是:

1.如果pipeline包含的信息太长,redis在处理的时候就会占用更多的内存。同时pipeline在处理的时候回独占链接(没仔细研究过),这期间的其他任何操作都会失败。建议就是给pipeline使用一个单独的Client。

2.pipeline只是将数据批量打包发送,很可能里面有部分请求处理失败的情况。这个时候使用LUA脚本会更加合适,而且LUA脚本可以保证原子性。

参考:

http://shift-alt-ctrl.iteye.com/blog/1863790

http://www.redis.cn/commands/eval.html

List

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)

一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

#!/usr/bin/python3
import redis
import time key = 'Redis:ListTest' if __name__ == '__main__':
r = redis.Redis(host='192.168.192.34',port=6379)
r.lpush(key, '1')
r.lpush(key, '2')
r.rpush(key, '3')
print(r.llen(key))
res = r.rpop(key)
print(res)
res = r.lpop(key)
print(res)

在做爬虫的过程中,需要保留从网页上分析之后的URL,那就可以使用列表。可以使用不同的key来保存不同的优先级队列,在爬取得时候先获取优先级最高的队列,如果该队列为空,获取优先级比较低的队列。

Redis pipeline and list的更多相关文章

  1. redis pipeline

    redis pipeline 简而言之就是把多个redis命令打包,一起发送给redis server,并且一起返回结果,减少客户端和服务器之间的多次“折返跑”

  2. 如何用好redis pipeline

    编者注:pipeline是Redis的一个提高吞吐量的机制,适用于多key读写场景,比如同时读取多个key的value,或者更新多个key的value.工作过程中发现挺多小伙伴都对pipeline多少 ...

  3. 【spring boot】spring boot 基于redis pipeline 管道,批量操作redis命令

    spring boot 2.x 使用RedisTemplate 操作 =================================== 1.pom.xml <!--spring2.0集成r ...

  4. laravel中redis pipeline用法说明

    $res = Redis::pipeline(function($pipe) use($params) { for ($i = 0; $i < 1000; $i++) { $pipe->g ...

  5. redis 学习(11)-- redis pipeline

    redis pipeline 什么是流水线(pipeline) 首先来看 redis 执行一次操作所需要的时间: 1 次时间 = 1 次网络时间 + 1次命令时间 执行 n 次就需要: n 次时间 = ...

  6. 等待 Redis 应答 Redis pipeline It's not just a matter of RTT

    小结: 1.When pipelining is used, many commands are usually read with a single read() system call, and ...

  7. 说说 Redis pipeline

    更多技术文章,请关注我的个人博客 www.immaxfang.com 和小公众号 Max的学习札记. Redis 客户端和服务端之间是采用 TCP 协议进行通信的,是基于 Request/Respon ...

  8. (7)redis pipeline

    redis是一个cs模式的tcp server,使用和http类似的请求响应协议.一个client可以通过一个socket连接发起多个请求命令.每个请求命令发出后client通常 会阻塞并等待redi ...

  9. Redis Pipeline原理分析

    转载请注明出处:http://www.cnblogs.com/jabnih/ 1. 基本原理 1.1 为什么会出现Pipeline Redis本身是基于Request/Response协议的,正常情况 ...

随机推荐

  1. JLINK固件丢失或升级固件后提示Clone的解决办法

    J-LINK V8固件烧录指导 J-LINK 是使用过程中,如果内部固件意外损坏或丢失,请参考下面操作步骤说明,重新烧录JLINK固件. 安装固件烧录软件 请ATMEL官方网址下载AT91-ISP下载 ...

  2. Cornerstone问题

    // Cornerstone锁 Cornerstone locks a working copy whenever it performs operations suchs as commits, u ...

  3. C 中数组和指针的区别

    联系: 1,一个通过数组和下标实现的表达式可等价地通过指针和偏移量实现. 2,当数组名传递给一个函数时,实际上传递的是该数组第一个元素的地址. 区别: 1,指针是一个变量,因此,在C语言中,语句pa= ...

  4. MySql存储引擎特性对比

    下表显示了各种存储引擎的特性: 其中最常见的两种存储引擎是MyISAM和InnoDB 刚接触MySQL的时候可能会有些惊讶,竟然有不支持事务的存储引擎,学过关系型数据库理论的人都知道,事务是关系型数据 ...

  5. Largest Rectangle in Histogram-最大长方形

    题目描述: 给定n个非负整数height[n],分别代表直方图条的高,每个条的宽设为1,求直方图中面积最大的矩形的面积 题目来源: http://oj.leetcode.com/problems/la ...

  6. 【推荐】《Netty in action》书籍

    最近准备开始阅读一下<Netty in action>并且准备构架设计一个分布式系统.用于新项目. 貌似压力很大啊.压力就是东西.希望自己能够调节好. Netty in action是Ne ...

  7. Reads sequentially from multiple sources

    /* * Copyright (C) 2016 Stephen Ostermiller * http://ostermiller.org/contact.pl?regarding=Java+Utili ...

  8. oracle11g 远程登录数据库

    oracle11g 远程登录数据库比以往的任何版本都要简单,什么也不用做 1.OEM登录 在浏览器中直接输入,远程数据库的OEM网址,当然要把localhost或者主机名改成ip地址   https: ...

  9. Makefile 快速入门

    Makefile 速成 标签: Makefile编译器 2015-06-06 18:07 2396人阅读 评论(1) 收藏 举报  分类: C/C++(132)  Linux & MAC(19 ...

  10. BZOJ 3170 松鼠聚会(XY坐标)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=3170 题意:给出二维平面上n个点 (xi,yi).求一点t(1<=t<=n) ...