参考文章python操作Redis详解
1、连接Redis数据库
import redis
""" redis://:password@host:port/db(TCP) rediss://:password@host:port/db(TCP+SSL) unix://:password@/path/to/socket.sock?db=db(UNIX+socket) """
red = redis.Redis(host="127.0.0.1", port=6379, password="123456", db=0, decode_responses=True)
|
连接池的原理是,通过预先创建多个连接,当进行redis操作时,直接获取已经创建的连接进行操作
而且操作完成后,不会释放,用于后续的其他redis操作,这样就达到了避免频繁的redis连接创建和释放的目的,从而提高性能。
redis模块采用ConnectionPool来管理对redis server的所有连接。
import redis
pool = redis.ConnectionPool(host="127.0.0.1", port=6379, password="password", db=1) red = redis.Redis(connection_pool=pool, decode_responses=True)
|
2、常用操作
red.delete(*names)
red.exists(name)
red.keys(pattern='*')
red.expire(name, time)
red.rename(src, dst)
red.move(name, db)
red.randomkey()
red.type(name)
red.flushdb(asynchronous=False)
red.flushall(asynchronous=False)
with red.pipeline(transaction=False) as p: p.sadd("name", 1) p.execute()
|
3、String
string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象。
string类型是Redis最基本的数据类型,一个键最大能存储512MB。
red.set(name, value, ex=None, px=None, nx=False, xx=False)
red.mset(*args, kwargs)
red.setnx(name, value)
red.setex(name, value, time)
red.psetex(name, time_ms, value)
red.get(name)
red.mget(keys, args)
red.getset(name, value)
red.strlen(name)
red.getrange(key, start, end)
red.setrange(name, offset, value)
red.setbit(name, offset, value)
red.getbit(name, offset)
red.bitcount(key, start=None, end=None)
red.bitop(operation, dest, keys)
red.incr(self, name, amount=1)
red.incrbyfloat(self, name, amount=1.0)
red.decr(self, name, amount=1)
red.append(key, value)
|
4、Hash
red.hset(name, key, value)
red.hmset(name, mapping)
red.hget(name, key)
red.hmget(name, keys, args)
red.hgetall(name)
red.hlen(name)
red.hkeys(name)
red.hvals(name)
red.hexists(name, key)
red.hdel(name, *keys)
red.hincrby(name, key, amount=1)
red.hincrbyfloat(name, key, amount=1.0)
red.hscan(name, cursor=0, match=None, count=None)
red.hscan_iter(name, match=None, count=None)
|
5、List
- Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。
red.lpush(name, values)
red.lpushx(name, value)
red.blpop(keys, timeout)
red.llen(name)
red.linsert(name, where, refvalue, value)
red.lset(name, index, value)
red.lrem(name, value, num)
red.lpop(name)
red.lindex(name, index)
red.lrange(name, start, end)
red.ltrim(name, start, end)
red.rpoplpush(src, dst)
red.brpoplpush(src, dst, timeout=0)
def list_iter(name): """ 自定义redis列表增量迭代 :param name: redis中的name,即:迭代name对应的列表 :return: yield 返回 列表元素 """ list_count = r.llen(name) for index in xrange(list_count): yield r.lindex(name, index)
for item in list_iter("pp"): print item
|
6、Set
red.sadd(name, values)
red.scard(name)
red.sdiff(keys, args)
red.sdiffstore(dest, keys, args)
red.sinter(keys, args)
red.sinterstore(dest, keys, args)
red.sismember(name, value)
red.smembers(name)
red.smove(src, dst, value)
red.spop(name)
red.srandmember(name, numbers)
red.srem(name, values)
red.sunion(keys, args)
red.sunionstore(dest, keys, args)
sscan(name, cursor=0, match=None, count=None) sscan_iter(name, match=None, count=None)
|
7、Zset
Redis的zset和set一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
red.zadd(name, *args, kwargs)
red.zcard(name)
red.zcount(name, min, max)
red.zincrby(name, value, amount)
red.zrange(name, start, end, desc=False, withscores=False, score_cast_func=float)
red.zrank(name, value)
red.zrangebylex(name, min, max, start=None, num=None)
red.zrem(name, values)
red.zremrangebyrank(name, min, max)
red.zremrangebyscore(name, min, max)
red.zremrangebylex(name, min, max)
red.zscore(name, value)
red.zinterstore(dest, keys, aggregate=None)
red.zunionstore(dest, keys, aggregate=None)
red.zscan(name, cursor=0, match=None, count=None, score_cast_func=float) red.zscan_iter(name, match=None, count=None, score_cast_func=float)
|