【Python redis】

"下载:pip install redis
@html


基本用法

redis库提供两个类,RedisStrictRedis,用于实现Redis的命令.
StrictRedis用于实现大部分的官方命令,并使用官方的语法和命令.
Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py.python

Redis链接实例是线程安全的,能够直接将redis链接实例设置为一个全局变量,直接使用.redis

若是须要另外一个Redis实例(or Redis数据库)时,就须要从新建立redis链接实例来获取一个新的链接.数据库

链接redis,加上参数decode_responses=True时,写入的键值对中value为字符串类型,不然为字节类型.安全

基本操做服务器

from redis import Redis

# 创建一个链接实例
conn = Redis(host='localhost', port=6379, password='', decode_responses=True)


# ========= set 与 get (String类型)=========

conn.set('name', '01')
ret01 = conn.get('name')  # 01


# ========= hset 与 hget (Hash类型)=========

info = 'info'
conn.hset(info, 'k1', 'v1')
conn.hset(info, 'k2', 'v2')
ret02 = conn.hget('info', 'k1')  # v1


# ========= hmset 与 hgetall (Hash类型)=========

conn.hmset('data', {'k1': 'v1', 'k2': 'v2'})
conn.hmset('data', {'k3': 'v3', 'k4': 'v4'})
ret03 = conn.hgetall('data')  # {'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'k4': 'v4'}

链接池

使用ConnectionPool来管理对于一个redis服务器的全部链接,可避免每次链接时都要创建、释放链接的开销.app

默认,每一个Redis实例都会维护一个本身的链接池.ide

能够直接创建一个链接池,而后做为参数传给Redis实例,这样即可实现多个Redis实例共享一个链接池.线程

import redis

# 创建链接池
POOL = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)

# 建立两个Redis实例,共用一个链接池
conn01 = redis.Redis(connection_pool=POOL)
conn02 = redis.Redis(connection_pool=POOL)

conn01.set('name', 'n1')
conn02.set('name', 'n2')
# ...

print(conn01.get('name'))  # 此时的key值为:n2

基本命令

在Redis中设置值,默认不存在则建立,存在则修改.code

delete(*['k1', 'k2']) 指定key删除
flushdb () 清空当前库中的全部key
flushall() 清空整个 Redis 服务器的数据
·
模糊查询
keys('k*') 查全部以'k'开头的key

String

set(name, value, ex=None, px=None, nx=False, xx=False)

参数
·
ex 过时时间(秒),过时后值为None
px 过时时间(毫秒)
nx 若是设置为True,则只有name不存在时,当前set操做才会执行
xx 若是设置为True,则只有name存在时,当前set操做才会执行

操做
·
get(key):获取key的值.
mset(*args, **kwargs):批量设置值(例:mset({'k1': 'v1', 'k2': 'v2'}))
mget(key, *args):批量获取值(例:mget('k1', 'k2'))

详见runoob.

Hash

hset(name, key, value) 增长单个,不存在则建立
·
hget(name, key) 获取单个
·
hmset(name, mapping) 批量增长,mapping为字典
·
hgetall(name) 获取name对应hash的全部键值对
·
hlen(name) 获取name对应的hash中键值对的个数
·
hkeys(name) 获取name对应的hash中全部的key的值
·
hvals(name) 获取name对应的hash中全部的value的值
·
hexists(name, key) 检查name对应的hash是否存在当前传入的key
·
hdel(name, *keys) 将name对应的hash中指定的key的键值对删除

hscan_iter(self, name, match=None, count=None)
·
返回一个迭代器,list后类型为:[ ('k1', 'v2'), ('k2', 'v2'), (...)].
利用yield封装hscan建立的生成器,实现分批去redis中获取数据
·
参数:
match 匹配指定key,默认None表示全部的key.
count 每次分片最少获取的个数,默认None表示采用Redis的默认分片个数.

List

lpush(name, values) 在name对应的list中左边添加元素,没有就新建
·
llen(name) 获取name对应的列表长度
·
lrang(name, index1, index2) 按照index切片取出name对应列表里的值
·
lpushx(name, value) 只能添加不能新建
·
lset(name, index, value) 给指定索引修改值
·
index(name, index) 在name对应的列表中根据索引获取列表元素剩下的集合以及有序集合的命令.

linsert(name, where, revalue, value)
·
在name对应的列表的某一个值前或后插入一个新值.
·
参数:
name redis的name
where BEFORE或AFTER
refvalue 标杆值,即:在它先后插入数据
value 要插入的数据

lrem(name, value, num)
·
在name对应的list中删除指定的值
·
参数:
name redis的name
value 要删除的值
num:解释以下
num=0时,删除列表中全部的指定值
num=1时,从前到后,删除左边第1个
num=2时,从前到后,删除2个
num=-2时,从后向前,删除2个

set

sadd('k', 'v') 将一个活多个'v'添加到'k'中,'k'不存在时自动建立,'v'存在时忽略
·
scard('k') 统计'k'中有多少个成员
·
sinter('k') 查'k'中的全部成员
·
smembers('k') 查'k'中的全部成员
·
sismember('k', 'v') 判断'v'是不是'k'中的成员

sismember "

相关文章
相关标签/搜索