中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

緩存數據庫Redis——Redis部署與配置

發布時間:2020-07-25 19:19:12 來源:網絡 閱讀:431 作者:wx5d2c2d660c282 欄目:關系型數據庫

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

關系型數據庫:

一個機構化的數據庫,創建在關系模型基礎上,一般面向于記錄
包括oracle、mysql、sqlserver、db2

非關系型數據庫:

除了主流的關系型數據庫意外的數據庫,都人為是非關系型的
包括redis、mongdb、hbase、couhdb

非關系型數據庫產生背景

  • 對數據庫高并發讀寫需求
  • 對海量數據高效存儲與訪問需求
  • 對數據庫高可擴展性與高可用需求

Redis簡介

Redis基于內存運行并支持持久化

采用key-value(鍵值對)的存儲形式

優點:

  • 具有極高的數據讀寫速度
  • 支持豐富的數據類型
  • 支持數據的持久化
  • 原子性
  • 支持數據備份

安裝與配置Redis

1、安裝必要的環境組件,并安裝redis

[root@localhost ~]# yum install gcc gcc-c++ make -y  ##安裝環境組件
[root@localhost ~]# mkdir /mnt/tools
[root@localhost ~]# mount.cifs //192.168.100.100/tools /mnt/tools/  ##掛載
Password for root@//192.168.100.100/tools:  
[root@localhost ~]# cd /mnt/tools/redis/
[root@localhost redis]# ls
redis-5.0.7.tar.gz
[root@localhost redis]# tar xf redis-5.0.7.tar.gz -C /opt/   ##解壓
[root@localhost redis]# cd /opt/
[root@localhost opt]# ls
redis-5.0.7  rh
[root@localhost opt]# cd redis-5.0.7/
[root@localhost redis-5.0.7]# make   #編譯
..........//省略過程
[root@localhost redis-5.0.7]# make PREFIX=/usr/local/redis/ install   ##安裝
..........//省略過程

2、執行配置Redis配置文件腳本,并進行配置

[root@localhost redis-5.0.7]# cd utils/
[root@localhost utils]# ./install_server.sh    ##執行腳本進行配置
Welcome to the redis service installer
This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379]   ##默認端口
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf]   ##配置文件
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log]   ##日志文件
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379]   ##數據文件
Selected default - /var/lib/redis/6379
Please select the redis executable path [] /usr/local/redis/bin/redis-server
##可執行文件路徑
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/redis/bin/redis-server
Cli Executable : /usr/local/redis/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful! 
[root@localhost utils]# ln -s /usr/local/redis/bin/* /usr/local/bin/   ##便于系統識別
[root@localhost utils]# netstat -ntap | grep 6379    ##查看監聽端口
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      18004/redis-server  
[root@localhost utils]# /etc/init.d/redis_6379 stop  ##關閉redis
Stopping ...
Redis stopped
[root@localhost utils]# netstat -ntap | grep 6379   ##查看監聽端口
tcp        0      0 127.0.0.1:6379          127.0.0.1:33970         TIME_WAIT   -   
[root@localhost utils]# /etc/init.d/redis_6379 start  ##開啟redis
Starting Redis server...
[root@localhost utils]# netstat -ntap | grep 6379
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      18091/redis-server  
tcp        0      0 127.0.0.1:6379          127.0.0.1:33970         TIME_WAIT   -                   
[root@localhost utils]# 
[root@localhost utils]# vim /etc/redis/6379.conf   ##修改配置文件
bind 127.0.0.1 192.168.52.149  ##設置監聽地址
[root@localhost utils]# /etc/init.d/redis_6379 restart  ##重啟redis服務
Stopping ...
Redis stopped
Starting Redis server...

###Redis數據庫基礎操作

[root@localhost utils]# redis-cli -h 192.168.52.149 -p 6379   ##登錄redis
192.168.52.149:6379> help @list    ##獲取幫助列表

  BLPOP key [key ...] timeout
  summary: Remove and get the first element in a list, or block until one is available
  since: 2.0.0
...............................//省略部分內容
 RPUSHX key value
  summary: Append a value to a list, only if the list exists
  since: 2.2.0
192.168.52.149:6379> help set  ##help幫助

    SET key value [expiration EX seconds|PX milliseconds] [NX|XX]
    summary: Set the string value of a key
    since: 1.0.0
    group: string

192.168.52.149:6379> set name zhangsan   ##設置鍵值對
OK
192.168.52.149:6379> set net www
OK
192.168.52.149:6379> KEYS *   ##查看所有的鍵
1) "name"
2) "net"
192.168.52.149:6379> KEYS n??  ##查看鍵是n開頭后面是兩個字符的
1) "net"
192.168.52.149:6379> KEYS n*   ##查看鍵是n開頭的
1) "name"
2) "net"
192.168.52.149:6379> GET net   ##查看鍵的值
"www"
192.168.52.149:6379> EXISTS net  ##查看鍵是否存在
(integer) 1     ##1是存在,0是不存在
192.168.52.149:6379> EXISTS nat
(integer) 0
192.168.52.149:6379> del net  ##刪除鍵
(integer) 1
192.168.52.149:6379> KEYS *
1) "name"
192.168.52.149:6379> type name   ##查看鍵的類型
string
192.168.52.149:6379> rename name n1   ##給鍵重命名
OK
192.168.52.149:6379> KEYS *
1) "n1"
192.168.52.149:6379> get n1
"zhangsan"
192.168.52.149:6379> hset person score 80    ##用hash方式建立鍵值對
(integer) 1
192.168.52.149:6379> hset person name zhangsan   ##用hash方式建立鍵值對
(integer) 1
192.168.52.149:6379> hset person age 30   ##用hash方式建立鍵值對
(integer) 1
192.168.52.1490:6379> KEYS *
1) "person"
192.168.52.149:6379> hget person name   ##獲取鍵的值
"zhangsan"
192.168.52.149:6379> hget person age   ##獲取鍵的值
"30"
192.168.52.149:6379> set name lisi   ##獲取鍵的值
OK
192.168.52.149:6379> KEYS *
1) "name"
2) "person"
192.168.52.149:6379> EXPIRE name 10   ##設置鍵的自動刪除時間10s
(integer) 1
192.168.52.149:6379> KEYS *    ##10s內查看所有鍵
1) "name"
2) "person"
192.168.52.149:6379> KEYS *   ##10s后查看所有鍵
1) "person"
192.168.52.149:6379> exit   ##退出

3、進行壓測

[root@localhost utils]# redis-benchmark -h 192.168.52.149 -p 6379 -c 100 -n 100000
##并發100,100000個請求
====== SET ======
    100000 requests completed in 1.14 seconds   ##請求花費的時間
    100 parallel clients
    3 bytes payload
    keep alive: 1

84.66% <= 1 milliseconds
98.48% <= 2 milliseconds
99.69% <= 3 milliseconds
99.90% <= 18 milliseconds
100.00% <= 18 milliseconds
87642.41 requests per second

====== GET ======
    100000 requests completed in 1.13 seconds
    100 parallel clients
    3 bytes payload
    keep alive: 1
[root@localhost utils]# redis-benchmark -h 192.168.52.149 -p 6379 -q -d 100
    ##以字節形式指定set/get值的數據大小
    SET: 90497.73 requests per second
    GET: 90991.81 requests per second

4、移動鍵值對到其他的庫中(一共16個庫)

[root@localhost utils]# redis-cli -h 192.168.52.149 -p 6379         ##進入Redis            
192.168.52.149:6379> KEYS *
1) "mylist"
2) "counter:__rand_int__"
3) "n1"
4) "key:__rand_int__"
5) "myset:__rand_int__"
192.168.52.149:6379> SELECT 10  ##進入第11個庫
OK
192.168.52.149:6379[10]> KEYS *
(empty list or set)
192.168.52.149:6379[10]> SELECT 0  ##進入第1個庫
OK
192.168.52.149:6379> MOVE n1 10  ##移動鍵值對到第11個庫
(integer) 1
192.168.52.149:6379> KEYS *
1) "mylist"
2) "counter:__rand_int__"
3) "key:__rand_int__"
4) "myset:__rand_int__"
192.168.52.149:6379> SELECT 10  ##進入第11個庫
OK
192.168.52.149:6379[10]> KEYS *   ## 查看鍵
1) "n1"
192.168.52.149:6379[10]> GET n1
"zhangsan"
192.168.52.149:6379[10]> FLUSHDB  ##清除庫中數據
OK
192.168.52.149:6379[10]> KEYS *     ##查看所有鍵
(empty list or set)
192.168.52.149:6379[10]> SELECT 0   ##切換到第一個庫
OK
192.168.52.149:6379>KEYS *      ##查看所有的鍵
1) "myset:__rand_int__"
2) "mylist"
3) "key:__rand_int__"
4) "counter:__rand_int__"
192.168.52.149:6379> exit
[root@localhost utils]# 

Redis持久化

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

持久化分類

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

RDB持久化

Redis的默認持久化方式
默認文件名dump.rdb

觸發條件:

  • 在指定的時間間隔內,執行指定次數的寫操作(配置文件控制)
  • 執行save或者是bgsave(異步)命令
  • 執行flushall命令,清空數據庫所有數據
  • 執行shutdown命令,保證服務器正常關閉且不丟失任何數據

優缺點:

  • 適合大規模的數據恢復
  • 如果業務對數據完整性和一致性要求不高,RDB是很好的選擇
  • 數據的完整性和一致性不高
  • 備份時占用內存

通過RDB文件恢復數據

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

配置RDB持久化

[root@localhost utils]# vim /etc/redis/6379.conf 

#900秒之內至少一次寫操作
save 900 1

#300秒之內至少發生10次寫操作
save 300 10

#60秒之內發生至少10000次寫操作
save 60 10000

#只要滿足其一都會觸發快照操作,注釋所有的save項表示關閉RDB

#RDB文件名稱
dbfilename dump.rdb

#RDB文件路徑
dir /var/lib/redis/6379

#開啟壓縮功能
rdbcompression yes

AOF持久化

Redis默認不開啟
彌補RDB的不足(數據的不一致性)
采用日志的形式來記錄每個寫操作,并追加到文件中
Redis重啟會根據日志文件的內容將寫指令從前到后執行一次以完成數據的恢復工作

根據AOF文件恢復數據

將appendonly.aof文件拷貝到redis安裝目錄的bin目錄下,重啟redis服務即可

AOF持久化配置

[root@localhost utils]# vim /etc/redis/6379.conf 

#開啟AOF持久化
appendonly yes

#AOF文件名稱
appendfilename "appendonly.aof"

#always:同步持久化,每次發生數據變化會立刻寫入磁盤
# appendfsync always

#everysec:默認推薦,每秒異步記錄次(默認值)
appendfsync everysec

#no:不同步,交給操作系統決定如何同步
# appendfsync no

#忽略最后一條可能存在問題的指令
aof-load-truncated yes

AOF的重寫機制

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

AOF重寫的原理

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

AOF重寫配置

[root@localhost utils]# vim /etc/redis/6379.conf 
#在日志進行BGREWRITEAOF時, 如果設置為yes表示新寫操作不進行同步fsync,
#只暫存在緩沖區里,避免造成磁盤I0操作沖突,等重寫完成后在寫入。redis中默認為no
no-appendfsync-on-rewrite no

#當前AOF文件大小是上次日志重寫時AOF文件大小兩倍時,發生BGREWRITEAOF操作
auto-aof-rewrite-percentage 100

#當前AOF文件執行BGREWRITEAOF命令的最小值,
#避免剛開始啟動Reids時由于文件尺寸較小導致頻繁的BGREWRITEAOF
auto-aof-rewrite-min-size 64mb

Redis性能管理

##查看redis內存使用
[root@localhost utils]# /usr/local/redis/bin/redis-cli
127.0.0.1:6379> info memory

內存碎片率

●操系統分配的內存值used_ memory rss除以redis使用的內存值
used
_memory計算得出
●內存碎片是由操作系統低效的分配/回收物理內存導致的
不連續的物理內存分配
●跟蹤內存碎片率對理解redis實例的資源性能是非常重要的
內存碎片率稍大于1是合理的,這個值表示內存碎片率比較低
內存碎片率超過1.5,說明redis消耗了實際需要物理內存的150%,其中50%是內存碎片率
內存碎片率低于1的,說明Redis內存分配超出了物理內存,操作系統正在進行內存交換

內存使用率

●redis實例的內存使用率超過可用最大內存,操作系統將開始進行
內存與swap空間交換
●避免內存交換
針對緩存數據大小選擇
盡可能的使用Hash數據結構
設置key的過期時間

回收key

●保證合理分配redis有限的內存資源
●當內存使用達到設置的最大閥值時,需要選擇一種key的回收策略
默認情況下回收策略是禁止刪除
redis.conf配置文件中修改maxmemory-policy屬性值

  • volatile-lru:使用LRU算法從已設置過期時間的數據集合中淘汰數據
  • volatile-ttl:從已設置過期時間的數據集合中挑選即將過期的數據淘汰(建議使用)
  • volatile-random:從已設置過期時間的數據集合中隨機挑選數據淘汰
  • allkeys-lru:使用LRU算法從所有數據集合中淘汰數據
  • allkeys-random:從數據集合中任意選擇數據淘汰
  • no-enviction:禁止淘汰數據
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嘉荫县| 绥芬河市| 临汾市| 通江县| 岑溪市| 垦利县| 平定县| 西畴县| 苏尼特左旗| 莒南县| 巴中市| 泾阳县| 阿拉善右旗| 东明县| 桂林市| 蒲江县| 綦江县| 屏边| 肃北| 滨海县| 南安市| 汝阳县| 梓潼县| 淮安市| 新巴尔虎右旗| 蒙城县| 昌江| 永兴县| 苏州市| 衡水市| 大方县| 余江县| 大英县| 通化县| 城口县| 青浦区| 理塘县| 鄂温| 阜南县| 托克逊县| 永春县|