今天发现redis数据库中一个值总是1,但是程序中确实对这个值incr了N多次
每次incr了之后,都设置了一个expire时间,试着将expire这句注释掉之后,这个值就一直在增长
难道是expire不对吗?查找了redis的官方文档,没错啊,于是自己测试了一下
debian:~$ redis-cli
redis> incr dd
(integer) 1
redis> incr dd
(integer) 2
redis> incr dd
(integer) 3
redis> incrby dd 50
(integer) 53
redis> expire dd 600
(integer) 1
redis> get dd
53
redis> incr dd
(integer) 1
原来在expire之后,再incr就会重新从1开始,怪不得我那个值老是的呢,这明显是一个bug嘛。
先用dpkg看了一下redis的版本
debian:~$ dpkg -l redis-server
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Description
+++-============================-============================-========================================================================
ii redis-server 2:1.2.6-1 Persistent key-value database with network interface
原来是1.2.6的,现在最新的redis都2.4.4了啊。debian上的软件版本够老的!我的debian可是最新的debian 6啊。
于是自己下载redis代码,编译之后,用新版本的测试了一下
1. 下载解压
wget http://redis.googlecode.com/files/redis-2.4.4.tar.gz
tar -zxf redis-2.4.4.tar.gz
2. 编译
cd redis-2.4.4
make
3. 运行
先把redis.conf改一下,把daemonize改为yes,端口改为6378,然后启动redis
./src/redis-server redis.conf
4. 测试,
还是和老版本中的一样,但是结果是正确的。expire之后再incr,不会从1开始了
debian:~/software/redis-2.4.4$ redis-cli -p 6378
redis> incr dd
(integer) 1
redis> incr dd
(integer) 2
redis> incr dd
(integer) 3
redis> incrby dd 50
(integer) 53
redis> expire dd 600
(integer) 1
redis> get dd
53
redis> incr dd
(integer) 54