首页 > 技术文章 > Redis常用操作

staff 2018-11-14 01:36 原文

详细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

推荐阅读