详细Redis操作手册:
http://doc.redisfans.com/
python常用操作redis
import redis # 创建redis连接 conn = redis.Redis(host="127.0.0.1", port=6379, decode_responses=True) # 不加decode_responses参数,取出的是bytes类型 """ # 创建redis连接:连接池 pool = redis.ConnectionPool(host='127.0.0.1', port=6379, decode_responses=True) conn = redis.Redis(connection_pool=pool) """ # 把redis看做一个大字典,redis = {name1: {"k1": "v1"}} k1和v1必须为字符串,v1要存字典必须要序列化 # 给redis的name设置单个key-value conn.hset("name1", "k1", "v1") # 获取redis的单个name的key的value res1 = conn.hget("name1", "k1") # v1 # 给redis的name批量设置key-value conn.hmset("name2", {"k2": "v2", "k3": "v3"}) # 获取redis的name的所有key-value res4 = conn.hgetall("name2") # {'k2': 'v2', 'k3': 'v3'} # 返回redis的name组成的列表,满足name like SHOPPING_CART_* conn.scan_iter("SHOPPING_CART_*")
redis管道执行原子性操作
''' redis-py默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作, 如果想要在一次请求中指定多个命令,则可以使用pipline实现一次请求指定多个命令, 并且默认情况下一次pipline 是原子性操作 ''' import redis pool = redis.ConnectionPool(host='127.0.0.1', port=6379, decode_responses=True) r = redis.Redis(connection_pool=pool) # pipe = r.pipeline(transaction=False) pipe = r.pipeline(transaction=True) # 这两条一起执行 pipe.set('name', 'zhangsan') pipe.set('role', 'student') pipe.execute()
redis发布者订阅者:
pub.py 发布者
import redis conn = redis.Redis(host="localhost", port=6379, decode_responses=True) conn.publish("频道1", "消息2") # “频道1”相当于redis的name
sub.py 订阅者
import redis conn = redis.Redis(host="localhost", port=6379, decode_responses=True) # 第一步 生成一个订阅者对象 pubsub = conn.pubsub() # 第二步 订阅一个消息 pubsub.subscribe("频道1") # 创建一个接收 while True: print("start receiving...") msg = pubsub.parse_response() print(msg)
先运行一次pub.py,给"频道1"设定好值"消息1"
运行三次sub.py,产生三个订阅者,都接收到"消息1"
将pub.py的“消息1”改为“消息2”,运行一次, 三个订阅者都收到“消息2”
常用命令:
=========================
# 获取所有配置项 reids 127.0.0.1:6379> config get * # 获取单个配置项 redis 127.0.0.1:6379> config get loglevel # 编辑配置 redis 127.0.0.1:6379> config set loglevel "notice"
===========================
# 设置密码,密码保护Redis服务器 redis> CONFIG SET requirepass secret_password # 将密码设置为 secret_password OK redis> QUIT # 退出再连接,让新密码对客户端生效 [huangz@mypad]$ redis redis> PING # 未验证密码,操作被拒绝 (error) ERR operation not permitted redis> AUTH wrong_password_testing # 尝试输入错误的密码 (error) ERR invalid password redis> AUTH secret_password # 输入正确的密码 OK redis> PING # 密码验证成功,可以正常操作命令了 PONG # 清空密码 redis> CONFIG SET requirepass "" # 通过将密码设为空字符来清空密码 OK redis> QUIT $ redis # 重新进入客户端 redis> PING # 执行命令不再需要密码,清空密码操作成功 PONG
=======================================================================
select 2
切换db,一共有16个,编号为0,1,2,3,4....15
delete(*names)
1
|
# 根据删除redis中的任意数据类型 |
exists(name)
1
|
# 检测redis的name是否存在 |
keys(pattern='*')
1
2
3
4
5
6
7
|
# 根据模型获取redis的name # 更多: # KEYS * 匹配数据库中所有 key 。 # KEYS h?llo 匹配 hello , hallo 和 hxllo 等。 # KEYS h*llo 匹配 hllo 和 heeeeello 等。 # KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo |
expire(name ,time)
1
|
# 为某个redis的某个name设置超时时间 |
rename(src, dst)
1
|
# 对redis的name重命名为 |
move(name, db))
1
|
# 将redis的某个值移动到指定的db下 |
randomkey()
1
|
# 随机获取一个redis的name(不删除) |
type(name)
1
|
# 获取name对应值的类型 |
scan(cursor=0, match=None, count=None)
scan_iter(match=None, count=None)
1
|
# 同字符串操作,用于增量迭代获取key |