今天发现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
于是自己下载redis代码,编译之后,用新版本的测试了一下
1. 下载解压
wget http://redis.googlecode.com/files/redis-2.4.4.tar.gz tar -zxf redis-2.4.4.tar.gz
cd redis-2.4.4 make
先把redis.conf改一下,把daemonize改为yes,端口改为6378,然后启动redis
./src/redis-server redis.conf
还是和老版本中的一样,但是结果是正确的。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