Python操作redis

来源:互联网 发布:霍建华与林心如 知乎 编辑:程序博客网 时间:2024/06/05 11:49

一、redis
redis是一个key-value存储系统,它支持的存储的value类型有string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。为了保证效率,数据是缓存在内存中。redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。从盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。

二、Python操作redis
1、连接方式
redis-py提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类

#!/usr/bin/env python# -*- coding:utf-8 -*-import redisr = redis.Redis(host='192.168.0.110', port=6379,db=0)r.set('name', 'zhangsan')   #添加print (r.get('name'))   #获取

2、连接池
redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池。

#!/usr/bin/env python# -*- coding:utf-8 -*-import redispool = redis.ConnectionPool(host='192.168.0.110', port=6379)r = redis.Redis(connection_pool=pool)r.set('name', 'zhangsan')   #添加print (r.get('name'))   #获取

3、管道
redis-py默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作,如果想要在一次请求中指定多个命令,则可以使用pipline实现一次请求指定多个命令,并且默认情况下一次pipline 是原子性操作。

#!/usr/bin/env python# -*- coding:utf-8 -*-import redispool = redis.ConnectionPool(host='192.168.0.110', port=6379)r = redis.Redis(connection_pool=pool)pipe = r.pipeline(transaction=True)r.set('name', 'zhangsan')r.set('name', 'lisi')pipe.execute()

4、操作
4.1 String
redis中的String在在内存中按照一个name对应一个value来存储
set()

#在Redis中设置值,默认不存在则创建,存在则修改r.set('name', 'zhangsan')#设置过期时间(秒)r.setex(name, value, time)#设置过期时间(豪秒)r.psetex(name, time_ms, value)

mset()

#批量设置值r.mset(name1='zhangsan', name2='lisi')#或r.mget({"name1":'zhangsan', "name2":'lisi'})

get(name)

  获取值

mget(keys, *args)

#批量获取print(r.mget("name1","name2"))#或li=["name1","name2"]print(r.mget(li))

4.2 hash
redis中的Hash 在内存中类似于一个name对应一个dic来存储

hset(name, key, value)

#name对应的hash中设置一个键值对(不存在,则创建,否则,修改)r.hset("dic_name","a1","aa")

hget(name,key)

r.hset("dic_name","a1","aa")#在name对应的hash中根据key获取valueprint(r.hget("dic_name","a1"))#输出:aa

4.3 其他

r.delete('')r.flushdb()  #清空r中所有数据r.dbsize()   #当前数据库包含多少条数据    
0 0
原创粉丝点击