请选择 进入手机版 | 继续访问电脑版
查看: 924|回复: 0

[HTML代码] mysql redis nosql 同步

3万

主题

3万

帖子

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
100197
发表于 2016-8-13 15:42:49
代码里不用手动调用redis接口写入数据  同步数据更新更加简单 安全
                   
            
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. #
  4. # Update a redis server cache when an evenement is trigger
  5. # in MySQL replication log
  6. #
  7. import redis
  8. from pymysqlreplication import BinLogStreamReader
  9. from pymysqlreplication.row_event import (
  10.     DeleteRowsEvent,
  11.     UpdateRowsEvent,
  12.     WriteRowsEvent,
  13. )
  14. MYSQL_SETTINGS = {
  15.     "host": "127.0.0.1",
  16.     "port": 3306,
  17.     "user": "root",
  18.     "passwd": "root"
  19. }
  20. import time
  21. def main():
  22.     r = redis.Redis()
  23.     log_pos = 154
  24.     stream = BinLogStreamReader(connection_settings=MYSQL_SETTINGS, server_id=1, auto_position=False,
  25.                                 resume_stream=True,
  26.                                 only_events=[DeleteRowsEvent, WriteRowsEvent, UpdateRowsEvent],
  27.                                 log_file=
  28.                                 'mysql-bin.000003', log_pos=log_pos)  # 154
  29.     while True:
  30.         for binlogevent in stream:
  31.             prefix = "%s:%s:" % (binlogevent.schema, binlogevent.table)
  32.             for row in binlogevent.rows:
  33.                 if isinstance(binlogevent, DeleteRowsEvent):
  34.                     vals = row["values"]
  35.                     r.delete(prefix + str(vals["id"]))
  36.                 elif isinstance(binlogevent, UpdateRowsEvent):
  37.                     vals = row["after_values"]
  38.                     r.hmset(prefix + str(vals["id"]), vals)
  39.                 elif isinstance(binlogevent, WriteRowsEvent):
  40.                     vals = row["values"]
  41.                     r.hmset(prefix + str(vals["id"]), vals)
  42.                 print(vals)
  43.         time.sleep(0.001)
  44.         stream.close()
  45. if __name__ == "__main__":
  46.     main()
复制代码


回复

使用道具 举报