mysql数据利用pipe同步至redis

  1. 所有数据表,一条记录一个空间

    ps:*4 #表示有4个参数、$4 #表示"参数"有4个字节、

    java 复制代码
    //1.将"表名:主键"作为空间,字段名作为键,字段值作为value,查询出数据
    select 'HSET' AS redis_cmd , CONCAT('表名:',主键) AS redis_key,'字段名' AS hkey, 字段  AS hval from 表名 
    
    //2.将查询语句拼接成redis入库语句(每行默认以\n 结尾(windows是\n结尾,linux是 \r结尾)
    SELECT CONCAT("*4\n",'$', LENGTH(t.redis_cmd), '\n',t.redis_cmd, '\n','$', LENGTH(t.redis_key), '\n',t.redis_key, '\n','$', LENGTH(t.hkey), '\n',t.hkey, '\n','$', LENGTH(t.hval), '\n',t.hval) as redissql
    FROM (select 'HSET' AS redis_cmd , CONCAT('表名:',主键) AS redis_key,'字段名称' AS hkey, 字段  AS hval from 表名  ) 
    AS  t
    
    //3.将上述语句存入C:/Users/86188/Desktop/mysql_to_redis.sql脚本中
    //4.安装mysql和redis,并且配置全局环境变量
    //5.打开cmd窗口或者linux,执行即可
    //===mysql8===
    mysql --h ip地址 -u账户 -p密码 -D库名 --skip-column-names --raw <C:/Users/86188/Desktop/mysql_to_redis.sql |redis-cli -h 127.0.0.1 -p 6379 --pipe
    //===mysql6===
    mysql -h ip地址  -P 3306 -u 账户 -p密码  -D库名 --skip-column-names --raw <C:/Users/Administrator/Desktop/mysql_to_redis.sql |redis-cli -h 127.0.0.1 -p 6379 --pipe
  2. 所有数据表,一个表一个空间

    ps:这里发现当存在空值时,CONCAT结果为空,所以对于空数据需要做处理

    java 复制代码
    //1.将"表名"作为空间,主键字段作为键,数据json作为value,查询出数据
    select 'HSET' AS redis_cmd , '表名' AS redis_key,主键字段 AS hkey,   CONCAT('{', '"字段1名":', 字段1, ',"字段2名":', IFNULL(字段2, 'null')  ,'}')  AS hval from 表名 t
    
        
    //2.将查询语句拼接成redis入库语句
    SELECT CONCAT("*4\n",'$', LENGTH(t.redis_cmd), '\n',t.redis_cmd, '\n','$', LENGTH(t.redis_key), '\n',t.redis_key, '\n','$', LENGTH(t.hkey), '\n',t.hkey, '\n','$', LENGTH(t.hval), '\n',t.hval) as redissql
    FROM (select 'HSET' AS redis_cmd , '表名' AS redis_key,主键字段 AS hkey,   CONCAT('{', '"字段1名":', 字段1, ',"字段2名":', IFNULL(字段2, 'null')  ,'}')  AS hval from 表名 t  ) 
    AS  t
        
    //3.将上述语句存入C:/Users/86188/Desktop/mysql_to_redis.sql脚本中
    //4.安装mysql和redis,并且配置全局环境变量
        
    //5.打开cmd窗口或者linux,执行即可
    //mysql8
    mysql --h ip地址 -u账户 -p密码 -D库名 --skip-column-names --raw <C:/Users/86188/Desktop/mysql_to_redis.sql |redis-cli -h 127.0.0.1 -p 6379 --pipe
    //mysql5
    mysql -h ip地址  -P 3306 -u 账户 -p密码  -D库名 --skip-column-names --raw <C:/Users/Administrator/Desktop/mysql_to_redis.sql |redis-cli -h 127.0.0.1 -p 6379 --pipe
  3. 相关逻辑优化

    数据入库,如果作为键的字段非主键,即作为键的字段,可能存在相同的记录,后入的会把前面进入的给覆盖掉。所以如果存在优先级的数据关系,可以将优先级高的数据根据排序,排在后面,这样子最终存入缓存的数据,都是优先级高的数据。

    如:现在我们需要将人员信息存入缓存中,并且一个人员可能有多条记录。在这种情况下需要以最新的创建时间的人员记录为主。这种情况我们就可以根据人员id进行升序,插入时间进行升序。这样子,最终存入缓存的,一个人都必定只有一条记录,并且是最新的一条记录

    java 复制代码
    select 'HSET' AS redis_cmd , 'people' AS redis_key,people_id AS hkey,   CONCAT('{', '"people_id":', people_id, ',"create_time":', create_time  ,'}')  AS hval from people t order by people_id asc,create_time asc
相关推荐
蜡笔小炘26 分钟前
LVS -- 利用防火墙标签(FireWall Mark)解决轮询错误
服务器·数据库·lvs
韩立学长29 分钟前
基于Springboot泉州旅游攻略平台d5h5zz02(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·旅游
Re.不晚1 小时前
MySQL进阶之战——索引、事务与锁、高可用架构的三重奏
数据库·mysql·架构
老邓计算机毕设1 小时前
SSM智慧社区信息化服务平台4v5hv(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·智慧社区、·信息化平台
麦聪聊数据2 小时前
为何通用堡垒机无法在数据库运维中实现精准风控?
数据库·sql·安全·低代码·架构
2301_790300962 小时前
Python数据库操作:SQLAlchemy ORM指南
jvm·数据库·python
m0_736919102 小时前
用Pandas处理时间序列数据(Time Series)
jvm·数据库·python
亓才孓2 小时前
[JDBC]PreparedStatement替代Statement
java·数据库
m0_466525292 小时前
绿盟科技风云卫AI安全能力平台成果重磅发布
大数据·数据库·人工智能·安全
爱学习的阿磊3 小时前
使用Fabric自动化你的部署流程
jvm·数据库·python