最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

shell腳本批量導(dǎo)出redis key-value方式

 更新時(shí)間:2025年08月02日 08:53:27   作者:lc_1203  
為避免keys全量掃描導(dǎo)致Redis卡頓,可先通過(guò)dump.rdb備份文件在本地恢復(fù),再使用scan命令漸進(jìn)導(dǎo)出key-value,通過(guò)CNT和INTERVAL參數(shù)控制負(fù)載,且scan不指定游標(biāo)可減少阻塞

1 背景

需求:工作中需要導(dǎo)出線上redis數(shù)據(jù),但需避免使用keys命令全量掃描,導(dǎo)致瞬間響應(yīng)卡頓,從而引發(fā)超時(shí)等問(wèn)題

方法:最安全的方式是通過(guò)dump.rdb備份文件,在本地redis實(shí)例上恢復(fù),然后執(zhí)行shell腳本,使用scan漸進(jìn)掃描批量導(dǎo)出key-value。

2 詳細(xì)步驟

2.1 本地docker啟動(dòng)redis

本地通過(guò)docker-compose創(chuàng)建redis實(shí)例,并掛載配置文件和數(shù)據(jù)目錄

  • docker-compose.yml
version: '3'
services:
  redis:
    image: redis
    container_name: redis
    restart: always
    command: redis-server /etc/redis/redis.conf
    ports:
      - 46379:6379
    environment:
      TZ: Asia/Shanghai
      LANG: en_US.UTF-8
    volumes:
      - ./mnt/conf/redis.conf:/etc/redis/redis.conf:rw
      - ./mnt/data:/data:rw
  • 在宿主機(jī)創(chuàng)建配置文件

指定dump恢復(fù)目錄及文件,和redis實(shí)例密碼

mkdir -p ./mnt/conf
vim ./mnt/conf/redis.conf
requirepass GSef7NOoIH5R
dbfilename dump.rdb
dir /data
  • 將dump.rdb備份文件放在宿主機(jī)./mnt/conf/data下,啟動(dòng)redis
docker-compose up -d
  • 通過(guò)日志查看備份恢復(fù)進(jìn)度
docker logs -f redis
  • 驗(yàn)證恢復(fù)情況
# 進(jìn)入容器
docker exec -it redis bash

# 認(rèn)證
auth GSef7NOoIH5R

# 查詢key數(shù)量
dbsize

2.2 shell批量導(dǎo)出腳本

  • 進(jìn)入容器
docker exec -it redis bash
  • 為便于后續(xù)操作,在容器安裝vim(也可在宿主機(jī)掛載目錄創(chuàng)建shell腳本)
# 換源并安裝vim
sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list  \
    && apt update -y \
    && apt-get install -y vim

# 解決vim中文亂碼
echo -e "syntax on \nset termencoding=utf-8 \nset encoding=utf8 \nset fileencodings=utf8,ucs-bom,gbk,cp936,gb2312,gb18030" >> ~/.vimrc
  • 創(chuàng)建shell腳本

使用的scan命令漸進(jìn)遍歷,相對(duì)于keys命令全量遍歷速度慢些,但勝在安全,對(duì)redis的負(fù)載低。其中:

  • 可通過(guò)CNT參數(shù)設(shè)定迭代元素的數(shù)量來(lái)以控制redis負(fù)載
  • 獲取value值時(shí),通過(guò)INTERVAL調(diào)整redis-cli的執(zhí)行間隔,來(lái)控制redis負(fù)載
vim redis_export.sh
#!/bin/bash
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=GSef7NOoIH5R
CNT=1000

KEY_NAME=vc_*
KEY_FILE=key_list.txt
VALUE_FILE=value_list.txt
RESULT_FILE=kv_result.txt
INTERVAL=0.01

redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD scan 0 match "$KEY_NAME"  count $CNT 2>/dev/null> scan_tmp_result
new_cursor=`sed -n '1p' scan_tmp_result`
sed -n '2,$p' scan_tmp_result > $KEY_FILE

while [ $new_cursor -ne 0 ]
do
  redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD scan $new_cursor match "$KEY_NAME" count $CNT 2>/dev/null> scan_tmp_result
  new_cursor=`sed -n '1p' scan_tmp_result`
  echo `cat $KEY_FILE |wc -l`
  sed -n '2,$p' scan_tmp_result >> $KEY_FILE
done
TOTAL=`cat $KEY_FILE |wc -l`
echo $TOTAL

> $VALUE_FILE
i=0
for key in `cat $KEY_FILE`
do
    i=$(($i+1))
    if [[ ${i}%1000 -eq 0 || ${i} -eq $total ]]; then
	    echo "$i / $TOTAL"
    fi
    echo "GET $key" | redis-cli $INTERVAL -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD 2>/dev/null >> $VALUE_FILE
done
paste $KEY_FILE $VALUE_FILE > $RESULT_FILE
rm -f scan_tmp_result $VALUE_FILE $KEY_FILE
  • 運(yùn)行腳本
bash ./redis_export.sh

3 附錄

記錄下實(shí)踐時(shí)的其它方法/功能:

  • scan掃描不指定游標(biāo),相比keys pattern模式不會(huì)長(zhǎng)時(shí)間阻塞redis。(可通過(guò)-i調(diào)整執(zhí)行間隔控制負(fù)載)
redis-cli  -a GSef7NOoIH5R --scan --pattern "vc_*">/tmp/redis.log
  • keys全量掃描(慎用)
echo "KEYS vc_*" | redis-cli -a GSef7NOoIH5R >/tmp/redis.log

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Redis中pipeline(管道)的實(shí)現(xiàn)示例

    Redis中pipeline(管道)的實(shí)現(xiàn)示例

    Redis管道(Pipeline)技術(shù)是一種提高數(shù)據(jù)處理效率的機(jī)制,允許客戶端通過(guò)一次網(wǎng)絡(luò)往返(RTT)發(fā)送多個(gè)命令到服務(wù)端,并一次性接收所有響應(yīng),本文就來(lái)實(shí)現(xiàn)管道,感興趣的可以了解一下
    2024-10-10
  • 關(guān)于分布式鎖的三種實(shí)現(xiàn)方式

    關(guān)于分布式鎖的三種實(shí)現(xiàn)方式

    這篇文章主要介紹了關(guān)于分布式鎖的三種實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Redis緩存數(shù)據(jù)庫(kù)表(列單獨(dú)緩存)的示例代碼

    Redis緩存數(shù)據(jù)庫(kù)表(列單獨(dú)緩存)的示例代碼

    在Redis中緩存數(shù)據(jù)庫(kù)表數(shù)據(jù),而不使用JSON結(jié)構(gòu)來(lái)表示value,通常意味著我們會(huì)將數(shù)據(jù)庫(kù)表的每一行數(shù)據(jù)映射為Redis中的一個(gè)或多個(gè)鍵值對(duì),這篇文章主要介紹了Redis緩存數(shù)據(jù)庫(kù)表(列單獨(dú)緩存),需要的朋友可以參考下
    2024-03-03
  • Redis中Scan命令的踩坑實(shí)錄

    Redis中Scan命令的踩坑實(shí)錄

    這篇文章主要給大家介紹了關(guān)于Redis中Scan命令踩坑的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 在CenOS系統(tǒng)下安裝和配置Redis數(shù)據(jù)庫(kù)的教程

    在CenOS系統(tǒng)下安裝和配置Redis數(shù)據(jù)庫(kù)的教程

    這篇文章主要介紹了在CenOS系統(tǒng)下安裝和配置Redis數(shù)據(jù)庫(kù)的教程,Redis是一個(gè)可基于內(nèi)存的高性能NoSQL數(shù)據(jù)庫(kù),需要的朋友可以參考下
    2015-11-11
  • Redis 哨兵搭建的實(shí)現(xiàn)示例

    Redis 哨兵搭建的實(shí)現(xiàn)示例

    本文詳細(xì)介紹了Redis 7.2.5單節(jié)點(diǎn)和多節(jié)點(diǎn)哨兵的搭建流程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-09-09
  • Windows下搭建Redis哨兵集群模式的方法步驟

    Windows下搭建Redis哨兵集群模式的方法步驟

    哨兵模式,是基于主從復(fù)制模式,主從復(fù)制的優(yōu)點(diǎn)全都擁有,并且主從可以實(shí)現(xiàn)自動(dòng)切換,故障轉(zhuǎn)移等功能,本文主要介紹了Windows下搭建Redis哨兵集群模式的方法步驟,文中通過(guò)圖文介紹的非常詳細(xì),感興趣的小伙伴們可以參考一下,需要的朋友可以參考下
    2023-09-09
  • 淺談Redis 緩存的三大問(wèn)題及其解決方案

    淺談Redis 緩存的三大問(wèn)題及其解決方案

    Redis 經(jīng)常用于系統(tǒng)中的緩存,這樣可以解決目前 IO 設(shè)備無(wú)法滿足互聯(lián)網(wǎng)應(yīng)用海量的讀寫請(qǐng)求的問(wèn)題。本文主要介紹了淺談Redis 緩存的三大問(wèn)題及其解決方案,感興趣的可以了解一下
    2021-07-07
  • k8s部署redis集群實(shí)現(xiàn)過(guò)程實(shí)例詳解

    k8s部署redis集群實(shí)現(xiàn)過(guò)程實(shí)例詳解

    這篇文章主要為大家介紹了k8s部署redis集群實(shí)現(xiàn)過(guò)程實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 詳解redis緩存與數(shù)據(jù)庫(kù)一致性問(wèn)題解決

    詳解redis緩存與數(shù)據(jù)庫(kù)一致性問(wèn)題解決

    這篇文章主要介紹了詳解redis緩存與數(shù)據(jù)庫(kù)一致性問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評(píng)論

灯塔市| 宁安市| 衡南县| 翼城县| 白山市| 岑巩县| 岳阳县| 岳西县| 安达市| 淳安县| 屏山县| 汝南县| 南丰县| 家居| 遂溪县| 兴宁市| 措勤县| 定西市| 肥西县| 沙湾县| 苍山县| 乐至县| 汨罗市| 伊春市| 平乐县| 望奎县| 明水县| 竹北市| 化州市| 齐河县| 金平| 日土县| 柯坪县| 阜平县| 珲春市| 尚志市| 长汀县| 永春县| 伽师县| 广汉市| 兰考县|