redis与mysql数据互通

旧时模样 提交于 2020-01-19 16:59:39
from time import sleep

import pymysql
from rediscluster import StrictRedisCluster


class MysqldbHelper(object):
    def __init__(self, host='数据库地址', username='登录名', password='密码', database='库名称', charset='utf8'):
        self.host = host
        self.username = username
        self.password = password
        self.database = database
        self.con = None
        self.cur = None
        self.charset = charset
        try:
            self.con = pymysql.connect(host=self.host, user=self.username, passwd=self.password,
                                       db=self.database)
            # self.con = pymysql.connect(host=self.host, user=self.username, passwd=self.password, port=self.port,
            #                            db=self.database)
            # 所有的查询,都在连接 con 的一个模块 cursor 上面运行的
            self.cur = self.con.cursor()
            print('mysql :', self.database, '数据库成功连接')
        except Exception as  e:
            print(e)

    def execute(self, sql):
        sql_ = sql
        try:
            self.cur.execute(sql_)
            results = self.cur.fetchall()
            # print(results)
            return results
            self.cur.close()
        except pymysql.Error as e:
            error = 'MySQL execute failed! ERROR (%s): %s' % (e.args[0], e.args[1])
            print(error)


# redis集群中的所有主结点(所有master结点)
startup_nodes = [
    {'host': '172.17.0.4', 'port': '6379'},
    {'host': '172.17.0.5', 'port': '6380'},
    {'host': '172.17.0.6', 'port': '6381'},
    {'host': '172.17.0.7', 'port': '6382'},
    {'host': '172.17.0.8', 'port': '6383'},
    {'host': '172.17.0.9', 'port': '6384'},
]

if __name__ == '__main__':
    try:
        # 连接mysql
        sql = MysqldbHelper(host='192.168.76.146',
                            username='root',
                            password='123456',
                            charset='utf-8',
                            database='test_data')
        # 连接Redis集群
        # 构建StrictRedisCluster对象
        rClu = StrictRedisCluster(startup_nodes=startup_nodes, decode_responses=True, password="123456")
        print('Redis 集群连接成功')
    except Exception as e:
        print(e)

    command = ["select * from test_data", "desc test_data"]
    desc = []

    print('获取mysql信息到Redis')
    result = sql.execute(command[1])  # 顺序获取字段名称
    for name in range(len(result)):
        desc.append(result[name][0])
        pass

    result = sql.execute(command[0])  # 将id添加到Redis set中
    for i in range(len(result)):
        for j in range(len(result[i])):
            # rClu.sadd(desc[j], result[i][j])
            rClu.set(name=result[i][j], value='登录', ex=5, nx=True)  # 过期时间5s,存在不设置
            # print(desc[j], ':', result[i][j])
            pass

    for i in range(len(result)):  # 每个用户
        print(result[i][0], ':', rClu.get(result[i][0]))

    print('休息5秒')
    sleep(5)
    for i in range(len(result)):  # 每个用户
        print(result[i][0], ':', rClu.get(result[i][0]))

    pass

运行结果:

mysql : test_data 数据库成功连接
Redis 集群连接成功
1 : 登录
2 : 登录
3 : 登录
休息5秒
1 : None
2 : None
3 : None
 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!