为什么用redis:https://www.cnblogs.com/linianhui/p/what-problem-does-redis-solve.html
redis 占用CPU过高怎么解决:https://blog.youkuaiyun.com/comeonyangzi/article/details/79274035
python调用:
redis_test.py
记录基础操作及发布订阅
#coding:utf-8
redis_host = '10.235.97.220'
redis_port = 6378
import redis, uuid,copy,threading
class redis_demo(object):
def __init__(self,**config):
cig = copy.deepcopy(config)
self.config = {}
for k in config:
if config.get('redis_port') or config.get('redis_host'):
raise ValueError('redis_host or redis_host is null' )
self.config[k] = cig.pop(k)
self.connect_redis()
self.lock = threading.Lock()
def connect_redis(self):
pool = redis.ConnectionPool(**self.config)
self.r_redis = redis.Redis(connection_pool=pool)
def producer(self,type=1):
'''
生产数据类型
'''
self.r_redis.set(str(uuid.uuid1()),'test')
def public(self,pub=None,msg=None):
'''
发布订阅
'''
self.lock.acquire()
#channel 通道机订阅名称
self. p = self.r_redis.publish(pub,msg)
self.lock.release()
def subscribe(self,sub=None):
pub = self.r_redis.pubsub()
pub.subscribe(sub)
pub.parse_response()
return pub
def __del__(self):
pass
# redis_demo(host=redis_host,port=redis_port,db=0)
'''
name:设置名称
value:设置值
ex,过期时间(秒)
px,过期时间(毫秒)
nx,如果设置为True,则只有name不存在时,当前set操作才执行
xx,如果设置为True,则只有name存在时,当前set操作才执行
'''
#---------string格式
# r_redis.set(str(uuid.uuid1()),'test')
# r_redis.expire('qml_session',30)#制定某个key的过期时间
# print(r_redis.type('sms_code'))#获取某个key的数据类型 有hash string
# print(r_redis.keys('*6c7c*'))#模糊匹配key
#---------List格式 Left、right都可插入元素
'''
Lpush——先进后出,在列表头部插入元素
Rpush——先进先出,在列表的尾部插入元素
Lrange——出栈,根据索引,获取列表元素
Lpop——左边出栈,获取列表的第一个元素
Rpop——右边出栈,获取列表的最后一个元素
Lindex——根据索引,取出元素
Llen——链表长度,元素个数
Lrem——根据key,删除n个value
Ltrim——根据索引,删除指定元素
Rpoplpush——出栈,入栈
Lset——根据index,设置value
Linsert before——根据value,在之前插入值
Linsert after——根据value,在之后插入值
'''
# #先进先出后出示
# [r_redis.lpush('lpush',x) for x in range(10)]
# print(r_redis.lrange("lpush", 0, -1))#先进后出 左边出栈
# print(r_redis.lpop('lpush')) #左边出栈,获取列表的第一个元素
# #先进先出
# [r_redis.rpush('rpush',x) for x in range(10)]#先进先出 左边出栈
# print(r_redis.lrange("rpush", 0, -1))#先进后出 左边出栈
# print(r_redis.rpop('lpush')) #右边出栈,获取列表的最后一个元素
#
# # print(r_redis.keys())#获取db=0下的所有key
# print(r_redis.flushall())#清空所有数据库里面的数据
# # print(r_redis.flushdb()) #只清空当前数据库里面的数据,连接时指定的数据库:db=10
# print(r_redis)
# print(r_redis.__dict__)
server.py
发布消息
#coding:utf-8
from apiAuto.working.redis.redis_test import redis_demo
import logging
from apiAuto.utils.logger import Logger
import time
redis_host = '10.235.97.220'
redis_port = 6378
#public
class public:
def __init__(self):
self.r = redis_demo(host=redis_host,port=redis_port,db=0)
self.c = 0
def producer(self):
while self.c < 100:
self.r.public(pub='test',msg = str(self.c))
self.c += 1
time.sleep(5)
Logger.info('生产第 {} 次'.format(str(self.c)))
public().producer()
sub.py
订阅消息
#coding:utf-8
from apiAuto.working.redis.redis_test import redis_demo
redis_host = '10.235.97.220'
redis_port = 6378
class sub_custom:
def __init__(self):
self.r = redis_demo(host=redis_host,port=redis_port,db=0)
self.c = 0
def custom(self):
self.pub = self.r.subscribe('test')
while self.c < 2 :
print(self.pub.parse_response())
self.c += 1
print(self.pub.punsubscribe())
self.pub.unsubscribe('test')#取消订阅
sub_custom().custom()