python redis 操作
2016-04-12
redis server安装
我用的ubuntu
sudo apt-get install redis-server
安装完成后就会启动一个redis 服务, 默认端口6379,
配置文件路径是/etc/redis/redis.conf
,有必要的时候对服务的配置进行修改
比如, 默认的配置绑定了本地ip 127.0.0.1 即不允许远程连接redis-server, 我们将配置中的
bind 127.0.0.1
改成
bind 0.0.0.0
即可允许任意远程连接
安装python redis 模块
sudo pip install redis
如果无法安装成功, 可能是无法连接pipy的国外源, 可以指定国内的源, 比如douban, 就可以快速安装成功
sudo pip install redis -i http://pypi.douban.com/simple
实践
打开解释器终端, 这里我使用ipython
import redis
r_con = redis.Redis("127.0.0.1",6379) #连接redis 服务
key-value 存取
r_con.set("name", "Yi_Zhi_Yu") #True
r_con.get("name") #'Yi_Zhi_Yu'
这是最近本的键值存取
r_con.append("name","Tony Wang") #18L
r_con.get("name") # 'Yi_Zhi_YuTony Wang'
append
会往一个已有key的value拼接字符串, 并返回新的value长度, 如果key不存在,则创建之, 并赋值value, 返回key的value长度
队列
redis 可以作为队列服务器, 对并发的写入操作进行有序处理
r_con.lpush("names", "Yi_Zhi_Yu") #1L
r_con.lpush("names", "Tony") # 2L
r_con.lpush("names", "Wang") # 3L
每次的push 都会返回队列长度,如 1L
,2L
(L
表示long
类型的整数)
或者通过llen 获取队列长度
r_con.llen("names") #3
从队列中依次获取队列的消息
r_con.rpop("names") #"Yi_Zhi_Yu"
r_con.rpop("names") #"Tony"
r_con.rpop("names") #"Wang"
如上是一种先进先出
的队列操作, 实际上, 上面的lpush
和rpop
中的push和pop 都带了表示方向的前缀,即l
和r
, 将队列想象为一根管子 “L ========= R
”, lpush
就表示从L端写入, rpop
就表示从R端读取, 所以可以举一反三, 还有rpush
, lpop
, 其队列的存取也根据前缀一目了然
队列操作还有带"x
“的函数, 比如lpushx
,rpushx
, 与对应的lpush
和rpush
区别只是前者不会往不存在的队列里推消息,而后者则会创建并推入消息
还有redis可以从一个队列里获取消息, 然后写入另一个队列, rpoplpush
, 这里就不做说明了
数据库大小
r_con.dbsize() #2L
dbsize 会返回redis 数据库中已有的keys的数量,
我们可以通过keys
来验证
r_con.keys() #['name', 'names']
删除key
r_con.delete("names") #1
删除keys(允许多个key)的值,成功返回1, 失败返回0
自增(incr)和自减(decr)
对一个数值类型的值进行自增和自减, 常用语页面点击量等动态数据统计用
r_con.set("click",1) #True
r_con.incr("click") #2
r_con.incr("click",1) #3
r_con.incr("click",5) #8
第二个参数可以用于指定步进值
decr
与incr
正好相反
ping
通过ping
, 可以验证客户端与服务端的连接情况, 如果连接正常, 就返回True, 如果连接断了, 则会抛出一个ConnectionError
expire
给key
设置一个过期时间, key
存在返回True, 不存在返回False
r_con.set("name","test") #True
r_con.expire("name", 10) #True
10s 内可获取name的value 10s 后就不可获取了
此外还有一个expireat
可以设置在具体的时间点作为过期时间, 可以理解为expire at, 接受一个timestamp
或者datetime
作为过期时间点的参数
exists
判读key
是否存在
r_con.set("name","test") #True
r_con.expire("name", 10) #True
r_con.exists("name") #True
10s 后
r_con.exists("name") #False
flush 操作
表示删除数据库中的keys
有两种, 一种是删除当前数据库的,使用flushdb
还有一种是删除当前主机上的keys, 使用flushall
待续