从postgresql数据库同步数据到redis

从pg数据库同步到redis,主要分两步:

1、从pg数据库生成文件(100万条数据,大概需要30秒):

     1.1 windows下通过终端窗口执行如下命令:

           psql.exe -U postgres -h pg主机地址 -p pg端口 -d pg的某个库 -t -A -c "select '*3'||chr(10)||'$'||LENGTH('SET')||chr(10)||'SET'||chr(10)||'$'||LENGTH(concat_ws(':','URL001','WebMercatorQuad', z,x,y,format,'1'))||chr(10)||concat_ws(':','URL001','WebMercatorQuad', z,x,y,format,'1')||chr(10)||'$'||LENGTH(concat_ws('/','/URL001','1','WebMercatorQuad', z,x,concat_ws('', y, concat_ws('', '.', format))))||chr(10)||concat_ws('/','/URL001','1','WebMercatorQuad', z,x,concat_ws('', y, concat_ws('', '.', format)))||chr(10) from tiles1" >>E:\\format2redis.txt

         这个命令会生成一个txt文件,其格式如下:

          

      参数说明:

          *3: 表示总共有三个参数

     $3: 第一个参数的长度为3,也就是他的下一行,SET这个字符串的长度为3

          SET: 第一个参数
          $36: 第二个参数长度为36

          URL001:WEBMercatorQuad:4:13:6.png:1 第二个参数值

          $37: 第三个参数长度为37

          URL001/1/WEBMercatorQuad/4/13/6.png 第三个参数值

     1.2 将生成的txt导入redis(如果是docker启动的redis,需要将format2redis_2.txt拷贝到容器里,在容器中执行如下命令,100万数据,大概需要2秒):

           cat format2redis_2.txt|redis-cli --pipe

    等待命令执行结束,可以去redis查询刚导入的数据。

2、设置redis有效期为10天

      步骤同1,也是先生成txt文件,再把txt文件导入redis,只是生成txt文件时,命令有所变化,如下:

      psql.exe -U postgres -h redisHost -p 5432 -d geoppt_cache -t -A -c "select '*3'||chr(10)||'$'||LENGTH('EXPIRE')||chr(10)||'EXPIRE'||chr(10)||'$'||LENGTH(concat_ws(':','URL001','WebMercatorQuad', z,x,y,format,'1'))||chr(10)||concat_ws(':','URL001','WebMercatorQuad', z,x,y,format,'1')||chr(10)||'$'||LENGTH('864000')||chr(10)||'864000'||chr(10) from tiles1" >>E:\\format2redis_expire.txt

  生成的txt内容如下: 

  *3: 表示总共有三个参数
  $6:第一个参数的长度为6,也就是他的下一行,EXPIRE这个字符串的长度为6
  EXPIRE:第一个参数值
  $36:第二个参数长度
  URL001:WebMercatorQuad:6:52:27:png:1  第二个参数值
  $6:第三个参数长度
  864000:第三个参数值(864000秒,即10天)

    导入redis:

  cat format2redis_expire.txt|redis-cli --pipe

    验证:查询导入的key的有效期

posted @ 2022-08-22 10:14  学海无涯学吧  阅读(323)  评论(0)    收藏  举报