日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

NoSQL之Redis非关系数据库(redis概述,持久化,RDB持久化,AOF持久,内存碎片)

發布時間:2024/2/28 数据库 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NoSQL之Redis非关系数据库(redis概述,持久化,RDB持久化,AOF持久,内存碎片) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關系型數據庫與非關系型數據庫

  • 關系型數據庫與菲關系型數據庫
    • 關系型數據庫
    • 非關系型數據庫
  • 非關系型數據庫產生背景
    • Redis簡介
    • Redis配置文件
  • Redis的安裝
    • 安裝環境
  • Redis數據庫常用命令
  • Redis持久化
    • Redis概述
    • 持久化分類
    • RDB持久化
    • AOF持久化
    • 內存碎片率

關系型數據庫與菲關系型數據庫

關系型數據庫

  • 一個結構化的數據庫,創建在關系模型基礎上
  • 一般面向于記錄
  • 包括:Oracle、MySQL、Microsoft Access、DB2等

非關系型數據庫

  • 除了主流的關系型數據庫外的數據庫,都認為是非關系型
  • 包括:Redis、MongDB、Hbase、CouhDB等

非關系型數據庫產生背景

  • High performance——對數據庫高并發讀寫需求
  • Huge Storage——對海量數據高效存儲與訪問需求
  • High Scalability && High Availability——對數據庫高可擴展與高可用性需求

Redis簡介

  • Redis基于內存運行并支持持久化
  • 采用key-value(鍵值對)的存儲形式
  • 優點
  • 具有極高的數據讀寫速度
  • 支持豐富的數據類型
  • 支持數據的持久化
  • 原子性
  • 支持數據備份
  • Redis配置文件

    • 配置參數(/etc/redis/6379.conf)
  • bind:監聽的主機地址
  • port:端口
  • daemonize yes:啟用守護進程
  • pidfile:指定PID文件
  • loglevel notice:日志級別
  • logfile:指定日志文件
  • Redis的安裝

    安裝步驟

    安裝環境

    Centos7.6、redis-5.0.7

    安裝依賴環境

    [root@localhost ~]# yum -y install gcc gcc-c++

    解壓

    [root@localhost ~]#tar zxvf redis-5.0.7.tar.gz -C /opt/

    編譯

    [root@localhost ~]#tar zxvf redis-5.0.7.tar.gz -C /opt/ [root@localhost ~]# cd /opt/redis-5.0.7/ [root@localhost redis-5.0.7]# make [root@localhost redis-5.0.7]# make PREFIX=/usr/local/redis install

    將redis建立軟連接讓系統所能識別

    [root@localhost redis-5.0.7]# ln -s /usr/local/redis/bin/* /usr/local/bin/

    配置數據位置

    [root@localhost ]# cd /opt/redis-5.0.7/utils/ [root@localhost utils]# ./install_server.sh 一直回車

    ps:

    Selected config: Port : 6379 Config file : /etc/redis/6379.conf //配置文件路徑 Log file : /var/log/redis_6379.log //日志文件路徑 Data dir : /var/lib/redis/6379 //數據文件路徑 Executable : /usr/local/bin/redis-server //可執行文件路徑 Cli Executable : /usr/local/bin/redis-cli //客戶端命令工具

    查看服務是否開啟

    [root@localhost utils]# netstat -lutp | grep redis tcp 0 0 localhost:6379 0.0.0.0:* LISTEN 15570/redis-server

    命令對redis服務進行管理

    /etc/init.d/redis_6379 stop //停止 /etc/init.d/redis_6379 start //啟動 /etc/init.d/redis_6379 reboot //重啟 /etc/init.d/redis_6379 status //狀態

    Redis數據庫常用命令

    redis-cli命令

    連接本地數據庫

    [root@localhost utils]# redis-cli 127.0.0.1:6379>

    連接遠程數據庫

    配置文件添加ip

    [root@localhost utils]# vim /etc/redis/6379.conf 70 bind 127.0.0.1 192.168.136.30 [root@localhost utils]# redis-cli -h 192.168.136.30 -p 6379 192.168.136.30:6379>

    獲取命令幫助

  • help@:獲取中的命令列表
  • help:獲取某個命令的幫助
  • 127.0.0.1:6379> help @listBLPOP key [key ...] timeoutsummary: Remove and get the first element in a list, or block until one is availablesince: 2.0.0BRPOP key [key ...] timeoutsummary: Remove and get the last element in a list, or block until one is availablesince: 2.0.0

    方法二

    127.0.0.1:6379> help setSET key value [expiration EX seconds|PX milliseconds] [NX|XX]summary: Set the string value of a keysince: 1.0.0group: string
    • set:存放數據
    • get:獲取數據
    127.0.0.1:6379> set student zhangsan OK 127.0.0.1:6379> get studen "zhangsan"
    • key相關命令
  • keys:獲取符合規則的鍵值列表
  • exists:判斷鍵值是否存在
  • del:刪除當前數據庫的指定key
  • type:獲取key對應的value值類型
  • rename(覆蓋)/renamenx(不覆蓋):對已有的key進行重命名
  • dbsize:查看當前數據庫中key的數目
    • redis-benchmark測試工具
  • -h:指定服務器主機名
  • -p:指定服務器端口
  • -c:指定并發連接數
  • -n:指定請求數
  • -d:以字節的形式指定SET/GET值的數據大小
  • -q:強制退出Redis,僅顯示query/sec值
    • 向IP地址為192.168.10.161,端口為6379的Redis服務器發送100個并發連接與100000個請求測試性能
    [root@localhost utils]# redis-benchmark -h 192.168.136.30 -p 6379 -c 100 -n 100000
    • 測試存取大小為100字節的數據包的性能
    [root@localhost utils]# redis-benchmark -h 192.168.136.30 -p 6379 -q -d 100
    • Redis多數據庫操作

    dis支持多數據庫,默認支持16個數據庫,0-15個命名

    2、多數據庫相互獨立,互不干擾

    3、多數據庫常用命令

    多數據庫間切換

    多數據庫間移動數據

    清除數據庫內數據

    • 設置hash結構
    127.0.0.1:6379> hset table name tom age 20 score 99 (integer) 3 127.0.0.1:6379> hset table2 name jerry age 25 score 80 (integer) 3 127.0.0.1:6379> hget table age "20" 127.0.0.1:6379> hget table name "tom" 127.0.0.1:6379> hgetall table2 1) "name" 2) "jerry" 3) "age" 4) "25" 5) "score" 6) "80"

    Redis持久化

    Redis概述

    • Redis是運行在內存中,內存中的數據斷點丟失
    • 為了能夠重用Redis數據,或者防止系統故障,需要將Redis中的數據寫入到磁盤空間中,即持久化

    持久化分類

    • RDB方式:創建快照的方式獲取某一時刻Redis中所有數據的副本
    • AOF方式:將執行的命令寫到文件的末尾,以日志的方式來記錄數據的變化

    RDB持久化

    • Redis的默認持久化方式為RDB
    • 默認文件名dump.rdb
    • 觸發條件
  • 在指定的時間間隔內,執行指定次數的寫操作(配置文件控制)
  • 執行save或者是bgsave(異步)命令
  • 執行flushall命令,清空數據庫所有數據
  • 執行shutdown命令,保證服務器正常關閉且不丟失任何數據
    • 優缺點
  • 適合大規模的數據恢復
  • 如果業務對數據完整性和一致性要求不高,RDB是很好的選擇
  • 數據的完整性和一致性不高
  • 備份時占用內存
  • 通過RDB文件回復數據

    將dump。rdb文件拷貝到redis的安裝目錄的lib目錄下,重啟redis服務即可

    • 配置文件選項
    vim /etc/redis/6379.conf save 900 1 save 300 10 save 60 10000 dbfilename dump.rdb dir /var/lib/redis/6379 rdbcompression yesPS:含義 900秒之內至少一次寫操作,300秒之內至少發生10次寫操作、60秒之內發生至少10000次寫操作,只要滿足其一都會觸發快照操作,注釋所有的save項都表示關閉RDB RDB文件名稱 RDB文件路徑 是否進行壓縮

    AOF持久化

    • Redis默認不開啟
    • 彌補RDB的不足(數據的不一致性)
    • 采用日志的形式來記錄每個寫操作,并追加到文件中
    • Redis重啟會根據日志文件的內容將寫指令從前到后執行一次以完成數據恢復的恢復工作
    • 根據AOF文件恢復數據
  • 將appendonly.aof文件拷貝到Redis的安裝目錄的bin目錄下,重啟Redis服務即可
  • 配置文件選項
  • vim /etc/redis/6379.confappendonly yes ## 開啟AOF持久化 appendfilename "appendonly.aof" ## AOF文件名稱 # appendfsync always appendfsync everysec # appendfsync no aof-load-truncated yesPS: appendfsync always ## always:同步持久化,每次發生數據變化會立刻寫入磁盤 appendfsync everysec ## 默認推薦,每秒異步記錄一次(默認值) appendfsync no ## 不同步。交給操作系統決定如何同步

    3.AOF的重寫機制

    • AOF的工作原理是將寫操作追加到文件中,文件的冗余內容會越來越多
    • 當AOF文件的大小超過鎖設定的閾值,Redis就會對AOF文件的內容壓縮

    4.AOF重寫的原理

    • Redis會fork出一條新進程,讀取內存中的數據(并沒有讀取舊文件),并重新寫到臨時文件中,最后替換舊的aof文件

    5.AOF的重寫配置

    vim /etc/redis/6379.conf# 在日志進行BGREWRITEAOF時,如果設置為yes表示新寫操作不進行同步fsync,只是暫存在緩沖區里,避免造成磁盤IO操作沖突,等重寫完成后在寫入。Redis中默認為no no-appendfsync-on-rewrite no# 當前AOF文件大小是上次日志重寫時AOF文件大小兩倍時,發生BGREWRITEAOF操作 auto-aof-rewrite-percentage 100# 當前AOF文件執行BGREWRITEAOF命令的最小值,避免剛開始啟動Redis時由于文件尺寸較小導致的BGREWRITEAOF auto-aof-rewrite-min-size 64mb 12345678910
    • 查看Redis內存使用
    redis-cli -h 192.168.136.88 -p 6379

    內存碎片率

    • 操作系統分配的內存值used_memory_rss除以Redis使用的內存值used_memory計算得出
    • 內存碎片是由操作系統低效的分配/回收物理內存導致的
  • 不連續的物理內存分配
    • 跟蹤內存碎片率對理解Redis實例的資源性能是非常重要的
  • 內存碎片率稍大于1是合理的,這個值表示內存碎片率比較低
  • 內存碎片率超過1.5,說明Redis消耗了實際需要物理內存的150%,其中50%是內存碎片率
  • 內存碎片率低于1的,說明Redis內存分配超出了物理內存,操作系統正在進行內存交換
    • 內存使用率
  • redis示例的內存使用率超過可用最大內存,操作系統將開始進行內存與swap空間交換
  • 避免內存交換
  • 針對緩存數據大小選擇
  • 盡可能的使用Hash數據結構
  • 設置key的過期時間
    • 回收key
  • 保證合理分配redis有限的內存資源
  • 當達到設置額最大閾值時,需選擇一種key的回收策略
  • ①默認情況下回收策略是禁止刪除

    ②redis.com配置文件中修改maxmemory-policy屬性值

    ③volatile-lry:使用LRU算法從已設置過期時間的數據集合中淘汰數據

    ④volatile-ttl:從已設置過期時間的數據集合中挑選即將過期的數據淘汰

    ⑤volatite-random:從已設置過期時間的數據集合中隨機挑選數據淘汰

    ⑥allkeys-lru:使用LRU算法從所有數據集合中淘汰數據

    ⑦allkeys-random:從數據集合中任意選擇數據淘汰

    與swap空間交換
    \2. 避免內存交換
    \3. 針對緩存數據大小選擇
    \4. 盡可能的使用Hash數據結構
    \5. 設置key的過期時間

    • 回收key
  • 保證合理分配redis有限的內存資源
  • 當達到設置額最大閾值時,需選擇一種key的回收策略
  • ①默認情況下回收策略是禁止刪除

    ②redis.com配置文件中修改maxmemory-policy屬性值

    ③volatile-lry:使用LRU算法從已設置過期時間的數據集合中淘汰數據

    ④volatile-ttl:從已設置過期時間的數據集合中挑選即將過期的數據淘汰

    ⑤volatite-random:從已設置過期時間的數據集合中隨機挑選數據淘汰

    ⑥allkeys-lru:使用LRU算法從所有數據集合中淘汰數據

    ⑦allkeys-random:從數據集合中任意選擇數據淘汰

    dom:從數據集合中任意選擇數據淘汰

    與swap空間交換
    \2. 避免內存交換
    \3. 針對緩存數據大小選擇
    \4. 盡可能的使用Hash數據結構
    \5. 設置key的過期時間

    • 回收key
  • 保證合理分配redis有限的內存資源
  • 當達到設置額最大閾值時,需選擇一種key的回收策略
  • ①默認情況下回收策略是禁止刪除

    ②redis.com配置文件中修改maxmemory-policy屬性值

    ③volatile-lry:使用LRU算法從已設置過期時間的數據集合中淘汰數據

    ④volatile-ttl:從已設置過期時間的數據集合中挑選即將過期的數據淘汰

    ⑤volatite-random:從已設置過期時間的數據集合中隨機挑選數據淘汰

    ⑥allkeys-lru:使用LRU算法從所有數據集合中淘汰數據

    ⑦allkeys-random:從數據集合中任意選擇數據淘汰

    ⑧no-enviction:禁止淘汰數據

    總結

    以上是生活随笔為你收集整理的NoSQL之Redis非关系数据库(redis概述,持久化,RDB持久化,AOF持久,内存碎片)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。