php-redis benchmark

 redis  php-redis benchmark已关闭评论
3月 282016
 

脚本:

 

阿里云的1G标准的redis,当同时40个这样的PHP进程压测的话,会有8个进程最终出现select时 1s 超时异常; 但是人家给的指标是支持 300并发的

 Posted by at 下午 3:25

redis是如何处理同一个连接中连续的多个请求的

 redis  redis是如何处理同一个连接中连续的多个请求的已关闭评论
9月 102014
 

示例代码:

 输出:

 Posted by at 下午 7:24

redis 源码片段

 redis  redis 源码片段已关闭评论
7月 212013
 

 

1. redis的lru的使用

其中:

这个赋值是怎么体现lru的工作机制的?

 

2. 按照下面的调用过程来看redis对每个命令的处理过程:

至于redis协议中的每条指定对应server端的那一个函数,不会看到一个if..else.. 或者 switch结构的, 从 redisCommandTable 中来找就足够了(当然,quit命令找不到,似乎也只有quit命令)

 

3. 今天还了解一下细节

1) key和value都是作为redis的object来存储的,相同的value是重复使用的

2) 过期机制是通过将要过期的key写到一个过期table中来做的,这个是和memcache不同的

4. redis是支持认证机制的,当然,这样会多一次请求,而且认证请求不能和其它请求一起打包执行的

 

5. 关于Redis的LRU:

Redis的LRU是不精确的,不是在allkey中LRU的,而是在allkey中随机选取 maxmemory-samples 来LRU的,这一点要考虑一下是否满足需求。

redis_lru

 

(了解一下概率的计算方法吧)

摘录: http://oldblog.antirez.com/post/redis-as-LRU-cache.html

maxmemory-samples number_of_samples

The last config option is used to tune the algorithms precision. In order to save memory Redis just adds a 22 bits field to every object for LRU. When we need to remove a key we sample N keys, and remove the one that was idle for longer time. For default three keys are sampled, that is a reasonable approximation of LRU in the long run, but you can get more precision at the cost of some more CPU time changing the number of keys to sample.

Redis 2.2 的配置文件关于LRU的相关说明:

如何做Redis的持久化?

参考资料: http://tech.it168.com/a2012/0806/1381/000001381007_1.shtml

 

方式1: 简单的aof文件方式

这种方式只生成aof文件;

优点: 不会定期生成snapshot,对磁盘消耗小(不是少),也不会因为生成snapshot时写磁盘对服务带来影响(虽然影响不太大)

缺点: 重新启动服务时可能需要无法估计的时间

 

方式2: snapshot方式

该方式不生成aof文件,定期产生snapshot文件

优点: 重启服务时,启动速度快

缺点: 会丢失最后一次产生snapshot到意外宕机之间的写数据

 

方式3: aof + bgrewriteaof

1. 产生aof文件

2. 通过 bgrewriteaof 命令定期压缩aof(其实是根据内容中的数据重新生成aof)文件

优点: 不会导致aof文件太大而占用太大的磁盘文件,不会因为aof文件太大而导致重启服务时太慢

缺点: 毕竟重启服务还是要加载aof文件的

 

方式4: snapshot + aof + snapshot点   (该方式是否可行未经验证)

1. 定期产生snapshot文件

2. 产生snapshot文件后,删除文件中snapshot点之前的数据,这样aof就不会太大了

3. 服务重启时,先加载snapshop,在加载snapshot时间点后的aof文件

4. 这样的话,aof文件中记录的命令不应该有类似 incr decr之类的命令,应该都是set、delete之类的命令,这个和snapshot点的选择有关系(没法选择一个确切的snapshot点); 或者: snapshot期间允许用户执行写操作吗?不允许的话就没有这个问题了,如果不允许的话,这个条件也太苛刻了

 

关于snapshot的频率:

原来以为 save 300 10 解释为: 超过300s或者超过10条变更就snapshot,其实不是的,而是: 超过300s并且超过10条变更就snapshot

 Posted by at 上午 12:45

搭建一个微博系统

 redis  搭建一个微博系统已关闭评论
5月 052013
 

 

下载window版本redis:

https://github.com/dmajkic/redis

windows上让redis作为服务启动:

https://github.com/kcherenkov/redis-windows-service  可以直接下载里面编译好的二进制文件

下载retwis:

http://redis.googlecode.com/files/retwis-0.3.tar.gz   这个包中的redis协议不是最新的,可在下面地址下载:

http://phpor.net/download/retwis.zip

 

参考文档:

http://blog.csdn.net/archimedes_zht/article/details/6892511

 Posted by at 下午 5:29

关于redis的一些学习

 redis  关于redis的一些学习已关闭评论
11月 182012
 

关于keys命令

为什么使用keys命令遍历所有key不可取?

1. 相对于其他操作来讲,遍历所有key是一个耗时的操作

2. redis是一个单线程的程序,一个操作的阻塞,就会影响其他操作的执行

3. keys操作并不是匹配一个就输出一个的,而是都匹配出来之后才输出的;虽然没有copy每个匹配到的key,也就是说没有占用额外的服务器的内存,但是:

如果client端允许一边接收一边处理的话,则势必阻塞server端的操作;如果client端接收完再操作,则可能会消耗很多client端的内存。如果可以的话,大数据量似乎只能先暂存到磁盘了。

从根本上来讲,这似乎是redis的单线程机制造成的。

 Posted by at 下午 10:59