如何部署Redis ?
一:定義
Redis(remote dictionary server,遠程字典服務)是一個開源的使用ANSI C語言編寫、遵守BSD協議,支持網絡,可基於內存可持久化的日誌型、key-Value的數據庫,並提供多種語言的API。它通常被稱爲結構服務器,因爲值(value)可以是字符串(string),哈希(hash),列表(list),集合(sets)和有序集合(sorted sets)等類型。Redis是完全開源免費的,是一個高性能的key-value數據庫。
Redis 是一個高性能的key-value數據庫。,redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部 分場合可以對關係數據庫起到很好的補充作用 。Redis支持主從同步,數據可以從主服務器向任意數量的從服務器上同步,從服務器可以是關聯其他從服務器的主服務器。
Redis 作爲基於內存運行的數據庫, 緩存是其最常應用的場景之一, 除此之外, Redis
常見應用場景還包括: 獲取最新 N 個數據的操作、 排行榜類應用、 計數器應用、 存儲關係、
實時分析系統、 日誌記錄。
二:redis的特點
-
速度快,因爲數據存在內存中。Redis讀的數度是110000次/s,寫的數度是81000次/s
-
可用於緩存消息,按key設置過期時間,過期後將會自動刪除
-
豐富的數據類型,redis支持二進制案例的strings,lists,hashes,sets以及ordered sets數據類型操作
-
持久化數據,可存儲對象
-
支持數據備份、隊列、分佈式
-
原子性
-
缺點: 數據容量收到物理內存的限制,不能用於海量數據的高性能讀寫,因此Redis適合的場景主要侷限在較小數據量的高性能操作和運算上
三:Redis部署
1、實驗環境
-
VMware軟件,一臺centos7虛擬機(192.168.48.128)
-
官方下載redis軟件包,地址:https://redis.io/
2、實驗步驟
(1)安裝編譯工具
[root@localhost ~]# yum install gcc gcc-c++ make -y
(2)掛載redis軟件包並解壓
[root@localhost ~]# mkdir /abc
[root@localhost ~]# mount.cifs //192.168.0.107/share /abc
[root@localhost ~]# cd /abc
[root@localhost abc]# tar zvxf redis-5.0.7.tar.gz -C /opt
(3)直接進行make,且指定目錄並安裝
( 因爲解壓的軟件中的配置腳本已經被封裝化了,所以直接make )
[root@localhost abc]# 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
[root@redis redis-5.0.7]# cd /usr/local/redis/
[root@redis redis]# ls
bin
[root@redis redis]# cd bin/
[root@redis bin]# ls
redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server
(4)執行配置文件腳本,並設置
[root@redis bin]# cd /opt/redis-5.0.7/utils/
[root@localhost utils]# ./install_server.sh
(5)優化配置,創建軟鏈接便於系統識別
[root@localhost utils]# cd /etc/redis
[root@localhost redis]# ls
6379.conf
[root@localhost redis]# ln -s /usr/local/redis/bin/* /usr/local/bin
[root@localhost redis]# netstat -ntap | grep 6379
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 8761/redis-server 1
(6)進入redis數據庫,設置監聽端口,啓動服務,redis部署成功
[root@localhost redis]# vim /etc/redis/6379.conf
bind 127.0.0.1 192.168.48.128 ‘70行,添加本地地址’
[root@localhost redis]# /etc/init.d/redis_6379 restart ‘啓動服務’
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
Starting Redis server...
[root@localhost redis]# redis-cli -h 192.168.48.128 -p 6379 ‘成功登錄’
192.168.48.128:6379>exit ‘退出’
(7)redis壓測
[root@localhost redis]# redis-benchmark -h 192.168.48.128 -p 6379 -c 100 -n 100000
四:Redis基礎操作命令
[root@redis utils]# redis-cli -h 192.168.48.128 -p 6379
192.168.48.128:6379> help set '查看set命令幫助'
SET key value [expiration EX seconds|PX milliseconds] [NX|XX] 'set命令的格式'
summary: Set the string value of a key
since: 1.0.0
group: string
192.168.48.128:6379> set username ab '創建鍵值對(鍵名:username,值名:ab)'
OK
192.168.48.128:6379> set name ab '創建鍵值對(鍵名:name,值名:ab)'
OK
192.168.48.128:6379> KEYS * '查看所有鍵'
1) "username"
2) "name"
192.168.48.128:6379> keys n??? '查看n開頭且佔4個字節的key'
1) "name"
192.168.48.128:6379> get name '查看name鍵的值'
"ab"
192.168.48.128:6379> EXISTS name '查看name是否存在'
(integer) 1
192.168.48.128:6379> del name '刪除name鍵'
(integer) 1
192.168.48.128:6379> keys *
1) "username" '刪除成功'
192.168.48.128:6379> rename username user '將username鍵重命名爲user'
OK
192.168.48.128:6379> keys *
1) "user" '重命名成功'
192.168.48.128:6379> exit
五:move 命令:將當前數據庫的 key 移動到指定數據庫中
( 返回值:移動成功返回 1 ,失敗則返回 0 )
[root@redis utils]# redis-cli -h 192.168.48.128 -p 6379 '連接數據庫'
192.168.48.128:6379> keys * '默認進入第一個庫0'
1) "mylist"
2) "myset:__rand_int__"
3) "counter:__rand_int__"
4) key:__rand_int__"
5) "user"
192.168.48.128:6379> select 11 '切換至序號爲11的數據庫'
OK
192.168.48.128:6379[11]> keys * '查看所有鍵'
(empty list or set)
192.168.48.128:6379[11]> select 0 '切換至序號爲0的數據庫'
OK
192.168.48.128:6379> move user 11 '將user鍵值對移動到第11個庫'
(integer) 1
192.168.48.128:6379> select 11 '切換至序號爲11的數據庫'
OK
192.168.48.128:6379[11]> keys * '查看所有鍵'
1) "user"
192.168.48.128:6379[11]> get user '查看鍵值'
"ab"
192.168.48.128:6379[11]> flushdb '清空庫'‘(生產環境下一般不建議使用)’
OK
192.168.48.128:6379[11]> keys *
(empty list or set)
192.168.48.128:6379[11]> exit '退出'
六:Redis持久化
Redis是運行在內存中,內存中的數據斷電丟失。爲了能後重用Redis數據,或者防止系統故障,我們需要將Redis中的數據寫入到磁盤空間中,即持久化。
(1)RDB持久化
RDB持久化是redis默認的持久化方式,默認文件名爲dump.rdb
- 優缺點
適合大規模的數據恢復;
如果業務對數據完整性和一致性要求不高,RDB是很好的選擇;
備份時佔用內存。
- 通過RDB文件恢復數據
將dump.rdb文件拷貝到redis的安裝目錄的bin目錄下,重啓redis服務即可
- 配置RDB持久化
[root@redis 6379]# vim /etc/redis/6379.conf '修改配置文件'
(2)AOF持久化
AOF是一個redo log(重做日誌),Redis 默認是不開啓AOF的;爲了彌補 RDB 的不足(數據的不一致性);採用日誌的形式來記錄每個寫操作,並追加到文件中;Redis 重啓會根據日誌文件的內容將寫指令從前到後執行一次以完成數據的恢復工作。
- 通過AOF文件恢復數據
將appendonly.aof文件拷貝到redis安裝目錄的bin目錄下,重啓redis服務即可
- AOF的重寫機制
AOF的工作原理是將寫的操作追加到文件中,這會導致文件中的冗餘會越來越多;
當AOF文件的大小超過所設定的閾值時,Redis就會對AOF文件的內容壓縮。
- AOF的重寫原理
Redis 會fork 出一條新進程,讀取內存中的數據(並沒有讀取舊文件),並重寫到一個臨時文件中,最後替換舊的aof文件。
- 配置AOF持久化
[root@localhost redis]# vim /etc/redis/6379.conf