一. Redis的介紹 Redis 是一個Key-Value存儲的系統;它支持存儲的value類型有string(字元串),list(列表),set(集合),zset(有序集合);為了保證效率;數據都緩存在記憶體中;它也周期性將記憶體數據寫入磁碟或者把讀寫操作寫入記錄文件。Redis使用單線程模型;還有 ...
一. Redis的介紹
Redis 是一個Key-Value存儲的系統;它支持存儲的value類型有string(字元串),list(列表),set(集合),zset(有序集合);為了保證效率;數據都緩存在記憶體中;它也周期性將記憶體數據寫入磁碟或者把讀寫操作寫入記錄文件。Redis使用單線程模型;還有其他特性:例如健過期,發佈/訂閱,事務功能等等。
相比其他個Key-Value存儲的系統;有這些優勢:
- 數據的持久性;Redis會周期性將記憶體數據寫入磁碟和將讀寫操作寫入記錄文件。保證資料庫在重啟之後數據不丟失
- 支持master-slave模式;主從複製
- 支持存儲value類型多樣性;有list(列表),set(集合),zset(有序集合),bitmap等等。
- 在3.0版本正式提供了高可用分散式架構Redis Cluster集群;提供了高可用性,讀寫和容量的擴展。
二. Redis的安裝與部署
2.1 下載地址
2.2 安裝
tar -zxvf redis-5.0.0.tar.gz cd redis-5.0.0 make cd src make install PREFIX=/usr/local/redis mkdir -p /usr/local/redis/etc mv ../redis.conf /usr/local/redis/etc
2.3 創建redis用戶
習慣了使用非root用戶來管理資料庫;前提我們需要創建redis用戶和相關目錄
useradd redis mkdir -p /data/redis/{logs,conf,pid,data} chown -R redis:redis /data/redis
配置redis;在/data/redis/conf目錄下創建redis-6379.conf文件;內容如下
###基本參數### daemonize yes pidfile /data/redis/pid/redis-6379.pid port 6379 tcp-backlog 65535 bind 0.0.0.0 timeout 0 tcp-keepalive 0 loglevel notice logfile /data/redis/logs/redis-6379.log databases 16 lua-time-limit 5000 maxclients 10000 protected-mode yes dir /data/redis/data/ ###慢日誌參數### slowlog-log-slower-than 10000 slowlog-max-len 128 ###記憶體參數### #maxmemory 1G #maxmemory-policy volatile-lru ###RDB持久化參數### save 3600 1 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename "dump-6379.rdb" ###AOF持久化參數### no-appendfsync-on-rewrite yes appendonly yes appendfilename "appendonly-6379.aof" appendfsync no auto-aof-rewrite-min-size 512mb auto-aof-rewrite-percentage 100 aof-load-truncated yes aof-rewrite-incremental-fsync yes ###客戶端Buffer參數### client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 ###其他參數### hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-entries 512 list-max-ziplist-value 64 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 activerehashing yes latency-monitor-threshold 0 hz 10 ###安全參數### requirepass li0924 # masterauth 123456789 rename-command KEYS REDIS_KEYS rename-command FLUSHDB REDIS_FLUSHDB rename-command FLUSHALL REDIS_FLUSHALL ###複製參數(從庫)### ###集群參數###
相關配置參數:
- daemonize:如需要在後臺運行,把該項的值改為yes
- pdifile:把pid文件放在/var/run/redis.pid,可以配置到其他地址
- bind:指定redis只接收來自該IP的請求,如果不設置,那麼將處理所有請求,在生產環節中最好設置該項
- port:監聽埠,預設為6379
- timeout:設置客戶端連接時的超時時間,單位為秒
- loglevel:等級分為4級,debug,revbose,notice和warning。生產環境下一般開啟notice
- logfile:配置log文件地址,預設使用標準輸出,即列印在命令行終端的埠上
- database:設置資料庫的個數,預設使用的資料庫是0
- save:設置redis進行資料庫鏡像的頻率
- rdbcompression:在進行鏡像備份時,是否進行壓縮
- dbfilename:鏡像備份文件的文件名
- dir:資料庫鏡像備份的文件放置的路徑
- slaveof:設置該資料庫為其他資料庫的從資料庫
- masterauth:當主資料庫連接需要密碼驗證時,在這裡設定
- requirepass:設置客戶端連接後進行任何其他指定前需要使用的密碼
- maxclients:限制同時連接的客戶端數量
- maxmemory:設置redis能夠使用的最大記憶體
- appendonly:開啟appendonly模式後,redis會把每一次所接收到的寫操作都追加到appendonly.aof文件中,當redis重新啟動時,會從該文件恢復出之前的狀態
- appendfsync:設置appendonly.aof文件進行同步的頻率
- vm_enabled:是否開啟虛擬記憶體支持
- vm_swap_file:設置虛擬記憶體的交換文件的路徑
- vm_max_momery:設置開啟虛擬記憶體後,redis將使用的最大物理記憶體的大小,預設為0
- vm_page_size:設置虛擬記憶體頁的大小
- vm_pages:設置交換文件的總的page數量
- vm_max_thrrads:設置vm IO同時使用的線程數量
- stop-writes-on-bgsave-error 強制關閉Redis快照導致不能持久化;預設為yes
配置用戶環境變數
export REDIS_HOME=/usr/local/redis export PATH=$PATH:$REDIS_HOME/bin alias rds_start="redis-server /data/redis/conf/redis-6379.conf" alias rds_stop="redis-cli -a li0924 shutdown &> /dev/null" alias rsql="redis-cli"
2.4 啟動redis
redis-server /data/redis/conf/redis-6379.conf # 或者 rds_start
2.5 關閉redis
redis-cli shutdown
# 或者
rds_stop
當然還有一種更直接,更粗暴的方式 kill進程 。不建議這樣操作;因為這樣不會做持久化操作;
pkill redis-server
2.6 redis命令行
redis-cli
# 或者
rsql
2.7 redis工具箱
redis-benchmark:redis性能測試工具 redis-check-aof:檢查aof日誌的工具 redis-check-dump:檢查rdb日誌的工具 redis-cli:連接用的客戶端 redis-server:redis服務進程
2.8 消除Redis啟動提醒
當然這也許需要根據日誌如何提醒;做對應的修改。
# 在/etc/sysctl.conf文件添加 vm.overcommit_memory = 1 net.core.somaxconn = 65536 # 在/etc/rc.local文件添加 echo never > /sys/kernel/mm/transparent_hugepage/enabled
現在可以愉快玩耍redis
# 1. 啟動redis資料庫 [redis@Postgres ~]$ rds_start # 2. 連接redis資料庫 [redis@Postgres ~]$ rsql # 3. 密碼安全認證 127.0.0.1:6379> AUTH li0924 OK # 4. 查看所有健;原命令是KEYS *; 127.0.0.1:6379> redis_keys * 1) "name" # 5. 設置K-V 127.0.0.1:6379> set hello world OK 127.0.0.1:6379> redis_keys * 1) "hello" 2) "name" # 6. 獲取健hello的值 127.0.0.1:6379> get hello "world" # 7. 退出redis客戶端 127.0.0.1:6379> exit # 8. 關閉redis資料庫 [redis@Postgres ~]$ rds_stop [redis@Postgres ~]$ rsql Could not connect to Redis at 127.0.0.1:6379: Connection refused