python|python + redis 操作总结
一.基本操作
1.cmd窗口1启动redis服务(服务端)命令:redis-server
2.cmd窗口2启动客户端(客户端)命令:redis-cli
3.客户端输入级命令:ping,输出pong,证明服务启动正常
4.客户端获取redis密码:config get requirepass
5.客户端设置redis密码:config set requirepass 123456(设置单次密码)
6.设置永久密码:修改redis配置文件,redis安装目录下的redis.conf文件,找到# requirepass foobared修改为 requirepass 123456,修改密码为123456。
二.redis写入读取数据
import redis# 导入redis模块,通过python操作redis 也可以直接在redis主机的服务端操作缓存数据库r = redis.Redis(host='localhost', port=6379)# host是redis主机,需要redis服务端和客户端都启动 redis默认端口是6379
order = [[10001,2000,1500000,12],[10001,2001,1500000,13]]# 订单列表
user = {"id":1,"order":order,"state":1}
r.set("1",user)
a = r.get(1)
print(a)# 从redis数据库中获取的字节类型
a = a.decode("utf-8")# 将字节变为字符串
print(a)# 字符串类型
b = eval(a)# eval函数将类似列表的字符串转为列表,将类似字典的转换为字典
print(b["id"],b["order"],b["order"][0])
# 输出结果:1, [[10001]...,[10001]...],[10001,2000,150000,12]
【python|python + redis 操作总结】三.封装redis辅助类
class RedisHelper():# redis封装
def __init__(self, host='localhost', port=6379,db=0):
try:
self.__redis = redis.StrictRedis(host, port, db)
except Exception as e:
print(e)def get(self, key):
if self.__redis.exists(key):
return self.__redis.get(key)
else:
return ""def set(self, key, value):
self.__redis.set(key, value)
r = RedisHelper()# 实例化redis
r.set("1","user")# 写入数据
r.get("1")# 读取数据
四.使用redis连接池
import redis# 导入redis模块,通过python操作redis 也可以直接在redis主机的服务端操作缓存数据库pool = redis.ConnectionPool(host='localhost', port=6379, db=0, decode_responses=True)# host是redis主机,需要redis服务端和客户端都起着 redis默认端口是6379
r = redis.Redis(connection_pool=pool)
r.set('gender', 'male')# key是"gender" value是"male" 将键值对存入redis缓存
print(r.get('gender'))# gender 取出键male对应的值
五.生产消费模式
使用redis中的列表来实现一个消息队列,开启两个程序,一个作为生产者使用lpush写队列,一个作为消费者使用brpop读队列,由于消费者不知道什么时候会有数据传过来,所以消费者需要一直循环读取数据,两者的消息使用json进行封装协议传输。
# 生产者模型
import json
import redisMSG_TYPE_READ_BOOK = 0
MSG_TYPE_PLAY_GAME = 1
MSG_TYPE_SING_SONG = 2def make_message(m_id, m_type):# 产生一个消息
mess_dict = {"id": m_id, "type": m_type}
return json.dumps(mess_dict)def creator():# 生产消息放进消息队列
conn = redis.StrictRedis()# 实例化redis
for i in range(1, 10):
js_data = https://www.it610.com/article/make_message(i, i % 3)# 生产消息
print("push message:%s" % js_data)
conn.lpush("msgQueue", js_data)# 消息放进消息队列if __name__ == '__main__':
creator()
# 消费者模型import json
import redisMSG_TYPE_READ_BOOK = 0
MSG_TYPE_PLAY_GAME = 1
MSG_TYPE_SING_SONG = 2def parse_message(js_data): # 将消息队列中的消息解析成字典
return json.loads(js_data)def handle_message():
conn = redis.StrictRedis()
print("开始等待消息队列")
while True:
msg = conn.brpop("msgQueue")[1]
msg = str(msg, encoding="utf-8")# 将byte装换为str
msg_dict = parse_message(msg)
m_id = msg_dict["id"]
m_type = msg_dict["type"]
if m_type == MSG_TYPE_PLAY_GAME:
print("消息%d:我要打游戏"%m_id)
elif m_type == MSG_TYPE_READ_BOOK:
print("消息%d:我要读书"%m_id)
else:
print("消息%d:我要唱歌"%m_id)if __name__ == '__main__':
handle_message()
六.使用redis封装连接池
import redis# 定义redis类
class redis_ret():
def __init__(self):
# 初始化变量
self.rpool = redis.ConnectionPool(host="127.0.0.1",port=6379,db=0)# 设置链接主机(host=主机ip,port=端口号)
self.r = redis.Redis(connection_pool=self.rpool)# 建立连接池# 存储字典
def hset(self,name,key,value):
self.r.hset(name,key,value)# 存储字典
def hmset(self,name,key):
self.r.hmset(name,key)# 获取字典中对应的值
def hget(self,name,key):
return self.r.hget(name,key).decode("utf-8")# 获取字典中的值
def hmget(self,name,*args):
hmget_list = [i.decode("utf-8") for i in self.r.hmget(name,args)]
return hmget_list# 获取字典中的值,不存在返回amount
def hincrby(self,name,key,value):
self.r.hincrby(name,key,value)# 获取字典中的值,不存在返回floast型amount
def hincrbyfloat(self,name,key,value):
self.r.hincrbyfloat(name,key,value)#删除name对应的list中的第一个值
def lpop(self,name):
return self.r.lpop(name).decode("utf-8")# 删除name对应的list中的指定值
def lrem(self,name,value):
self.r.lrem(name,value)# 获取name对应的list的长度
def llen(self,name):
return self.r.llen(name)# 删除指定元素
def delete(self,name):
self.r.delete(name)# 获取name对应的list中切片后的值
def lrange(self,name,a,b):
lrange_list = [i.decode("utf-8") for i in self.r.lrange(name,a,b)]
return lrange_list# 存储列表(往后(右)插入)
def rpush(self,name,value):
self.r.rpush(name,value)# 在name对应的list中添加元素,name不存在不操作
def lpushx(self,name,value):
self.r.lpushx(name,value)
七.将redis添加到windows服务中
之前安装过redis数据库,也将redis服务添加到windows服务中,但是由于之前的服务路径已经不存在,导致redis服务每次启动的时候都找不到文件路径,所以redis服务也无法启动
解决方法:
1.重新安装redis服务:在github下载安装redis安装包https://github.com/MSOpenTech/redis/tags,下载安装包后解压到指定文件夹。
2.下载的要求配置为系统配置:
Redis-x64-3.2.100
win10 64
3.运行cmd,指向解压后的redis文件目录,
启动服务命令:redis-server redis.windows.conf
4.将redis解压目录添加到系统环境变量中
(1)点击(我的电脑)-->(属性)-->(高级系统设置)-->(环境变量)
(2)在系统变量这一栏找到「Path」这个变量,选择并点击下方的「编辑
(3)点击「新建」,将 Redis 的解压文件目录地址复制粘贴进去,然后点击下方的「确定」,关闭窗口,将前边的窗口都点击「确定」后关闭
(4)OK, Redis 环境变量已经添加完成,下边进行下一步
5.将redis服务添加到windows服务中:redis-server --service-install redis.windows.conf --service-name redis6379 --loglevel verbose
指定服务名称为redis6379,这样就不会和之前的服务名称冲突,也可以在不删除之前的服务情况下,安装新的redis服务。
6.正常将redis服务添加到windows服务中为在解压文件下输入命令:redis-server --service-install redis.windows-service.conf --loglevel verbose
推荐阅读
- 2.6|2.6 Photoshop操作步骤的撤消和重做 [Ps教程]
- MongoDB,Wondows下免安装版|MongoDB,Wondows下免安装版 (简化版操作)
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 在线版的迅捷思维导图怎么操作()
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- Python基础|Python基础 - 练习1
- 操作系统|[译]从内部了解现代浏览器(1)
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)