redis最新版本,windows系统最新版本redis,redis v6.2.5
redis编译起来确实费劲,不定时的各种报错。
每次redis新版本编译成功,总会有一种成就感,但是这种成就感也是要建立来头发越来越少的基础之上的!哈哈。 Continue reading
redis最新版本,windows系统最新版本redis,redis v6.2.5
redis编译起来确实费劲,不定时的各种报错。
每次redis新版本编译成功,总会有一种成就感,但是这种成就感也是要建立来头发越来越少的基础之上的!哈哈。 Continue reading
addXSetMember ReplyError: ERR unknown command ‘xadd’
做一个自己的小项目,Redis客户端,但是在测试添加Stream类型的数据时,出现上面的报错。
XADD是唯一可以向流(Stream类型)添加数据的Redis命令,但是还有其他命令, 例如XDEL和XTRIM,他们能够从流中删除数据。
Stream类型是Redis5.0开始支持的,我查了一下我windows系统中的redis版本,是3.2.100,以前在github下载的。
这样的话,就不支持xadd命令,把redis数据库升级到了Redis Windows 版本的最新版本(Redis v6.0.7)的,问题解决,但是折腾了好一阵子。
Redis要制作Windos版的,需要自行编译,手懒的可以找我。
redis最新版本,windows系统最新版本redis
Redis5.0带来了Stream类型。从字面上看是流类型,但其实从功能上看,应该是Redis对消息队列(MQ,Message Queue)的完善实现。用过Redis做消息队列的都了解,基于Reids的消息队列实现有很多种,例如:
自己的一个小项目中,需要使用到Stream类型数据,所以,就要开始折腾了。 Continue reading
用Cygwin环境编译Redis源码包时,报错:
0 1 2 3 4 5 6 7 |
$ make cd src && make all make[1]: 进入目录“/home/delladmin/redis-6.0.7/src” LINK redis-server cc: 错误:../deps/lua/src/liblua.a:No such file or directory make[1]: *** [Makefile:283:redis-server] 错误 1 make[1]: 离开目录“/home/delladmin/redis-6.0.7/src” make: *** [Makefile:6:all] 错误 2 |
意思是要进入目录/home/delladmin/redis-6.0.7/src/deps/lua/src 下,先行编译。
但是在进入lua进行编译时报错:
0 1 2 |
$ make Please choose a platform: aix ansi bsd freebsd generic linux macosx mingw posix solaris |
查看你的系统平台名称是否在支持的列表中(肯定不在里面,如果在里面就不会有这样的提示了),如果存在则继续运行make PLATFORM命令,否则按照lua的INSTALL说明我们可以选择运行make generic命令(PS:我这里是针对linux编译,即make linux)。一般情况下编译都是成功的。
0 |
$ make generic |
编译成功。
nodejs模块,redis作业/任务队列模块,bee-queue
Git URL:
0 |
git://www.github.com/bee-queue/bee-queue.git |
Git Clone代码到本地:
0 |
git clone http://www.github.com/bee-queue/bee-queue |
Subversion代码到本地:
0 1 2 3 |
$ svn co --depth empty http://www.github.com/bee-queue/bee-queue Checked out revision 1. $ cd repo $ svn up trunk |
一个简单、快速、健壮的Node.js 作业/任务(job/task) 队列。由Redis支持。
0 1 2 3 4 5 6 7 8 9 10 |
const Queue=require('bee-queue'); const queue=newQueue('example'); const job=queue.createJob({x:2, y:3})job.save(); job.on('succeeded', (result) => { console.log(`Received result for job ${job.id}: ${result}`); }); // Process jobs from as many servers or processes as you like queue.process(function (job, done) { console.log(`Processing job ${job.id}`); return done(null, job.data.x+job.data.y); }); |
Node
模块Nodejs
模块之ioredis
模块的简单使用
ioredis
是Nodejs的一个Redis
模块,有着与Redis
一模一样的 API 操作。
redis是单线程作业,所以不管查询任务是由一个链接发来的还是多个链接发来的,redis是串行的执行。并通过当前的链接返回客户端。nodejs接受redis的返回后,不管是不是并行,都要等主线程空闲下来才能一个个处理服务器返回的数据。
它有几个特点:
Redis Desktop Manager – 个人认为是目前最好用的Redis可视化管理工具。
redis可视化工具、Redis可视化管理工具、redis图形化管理工具、redis可视化客户端、redis集群管理工具
1、进入Redis Desktop Manager在git的发行版(免费版)页面 https://github.com/uglide/RedisDesktopManager/releases/tag/0.9.3
2、点击 redis-desktop-manager-0.9.3.817.exe ,下载
python获取所有数据,获取redis库中所有键值对
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import redis pool = redis.ConnectionPool(host='127.0.0.1', port=6379, db=0) r = redis.Redis(connection_pool=pool) len = 0 key_list = [] print r.pipeline() keys = r.keys() for key in keys: key_list.append(key) pipe.get(key) if len < pipe_size: len += 1 else: for (k, v) in zip(key_list, pipe.execute()): print k, v len = 0 key_list = [] for (k, v) in zip(key_list, pipe.execute()): print k, v |
Redis是建立在TCP协议基础上的CS架构,客户端client对redis server采取请求响应的方式交互。
一般来说客户端从提交请求到得到服务器相应,需要传送两个tcp报文。
设想这样的一个场景,你要批量的执行一系列redis命令,例如执行100次get key,这时你要向redis请求100次+获取响应100次。如果能一次性将100个请求提交给redis server,执行完成之后批量的获取相应,只需要向redis请求1次,然后批量执行完命令,一次性结果,性能是不是会好很多呢?
答案是肯定的,节约的时间是客户端client和服务器redis server之间往返网络延迟的时间。这个时间可以用ping命令查看。
网络延迟高:批量执行,性能提升明显
网络延迟低(本机):批量执行,性能提升不明显
某些客户端(java和python)提供了一种叫做pipeline的编程模式用来解决批量提交请求的方式。
这里我们用python客户端来举例说明一下。 Continue reading
1、python连接redis操作数据
0 1 2 3 4 5 6 7 8 9 |
#!/usr/bin/env python # -*- coding:utf8 -*- import redis r = redis.Redis(host='localhost', port=6379, db=0) r.set('foo', 'Bar') print (r.get('foo')) # 输出 Bar |
2、python连接redis操作线程池
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#!/usr/bin/env python # -*- coding:utf8 -*- import redis pool = redis.ConnectionPool(host='localhost', port=6379, db=0) r = redis.Redis(connection_pool=pool) pipe = r.pipeline() pipe_size = 100000 r.set('foo2', 'Bar2') print (r.get('foo2')) # 输出 Bar2 pipe = r.pipeline() pipe_size = 100000 |
3、decode_responses=True:这样写存的数据是字符串格式
0 1 2 |
import redis r = redis.Redis('127.0.0.1', 6379,decode_responses=True) |
4、获取库中所有键名
0 1 |
keys = r.keys() print(keys) |