1、Redis基礎redis
1.概述算法
Redis:Remote Dictionary Server,遠程字典服務器;發行與2009年,本質上來講,提供一種數據結構的遠程存儲結構;基於BSD開源協定的高級鍵值緩存和存儲。經常使用於做爲數據結構服務器(data structure server),可以存儲列表、屬組、字符串、hash、集合、有序集合、Bitmaps以及hyperloglogssql
2.特性數據庫
(1)全部數據集必須在內存中運行,性能高vim
(2)能提供持久存儲;在內存中運行,週期性將內存中數據寫入磁盤用於冗餘數據,僅保證下一次Redis啓動後數據依然存在,而不是數據的直接訪問緩存
註釋:持久化方式安全
快照(Snapshotting)數據從內存中異步傳輸至磁盤上保存起來服務器
AOF(Append Only File)每次的寫操做附加在一個現有的文件後面,相似於Mysql的事務日誌數據結構
(3)單進程,響應全部請求多線程
(4)支持Lua腳本完成複雜的操做
(5)支持組從模式,實現組從架構實現高可用;藉助於sentinel來監控主節點,當發生故障提高從節點
(6)redis 3.0開始支持集羣,實現分佈式,去中心化,讀寫操做能夠在多節點進行
(7)支持實現消息隊列,可當作訂閱使用
3.評估數據
(1)100萬較小的鍵值字符串數據使用100MB內存
(2)單線程,所以多核CPU只有一個核心會使用;但CPU不必定會成爲瓶頸,由於Redis是很是簡單的鍵值存儲
(3)大致上每秒承載50萬併發
4.Redis 3.0新功能:2015年4月1日正式推出
(1) 對於Cluster功能進行改進
(2) 新的數據類型:embedded string
(3) LRU(最近最小使用)算法改進
預設隨機取5個樣本,插入並排序至一個pool,移除最佳者,如此反覆,直到內存用量小於maxmemory設定
樣本數量爲5,多於先前的3
從局部最優趨向於全局最優
5.存儲系統
RDBMS關係型數據庫:Oracle、DB2、PostgreSQL、MySQL、SQL Server… ...
NoSQL非關係型數據庫:Cassandra、HBase、Memcached、MongoDB、Redis… …
key-value NoSQL:鍵值存儲NoSQL,Memcached、Redis… ...
Column family NoSQL:列式存儲NoSQL,Cassandra、Hbase… ...
Documentation NoSQL:文檔存戶NoSQL,MongoDB… ...
Graph NoSQL:圖示存儲NoSQL,Neo4j… ...
NewSQL分佈式的關係型數據庫系統:Aerospike、foundationDB、rethinkDB
2、Redis和Memcached對比
1.Memcached的優點
(1)分佈式的內存對象緩存系統
(2)支持LRU算法
(3)多線程;善用多核CPU,更少的阻塞類操做
(4)更少的內存開銷、內存分配壓力、內存碎片
2.Redis優點
(1)豐富的資料形態操做
(2)內奸replication複製及cluster集羣功能
(3)就地更新(in-place update) 操做,直接在內存中更新
(4)支持持久化,避免雪崩效應
3、Redis安裝配置
1.Redis組件
redis-server:服務器端
redis-cli:命令行客戶端,基於Redis協議連入redis服務端
redis-benchmmark:redis壓力測試工具
redis-check-dump &redis-check-aof:實現redis檢查的工具,檢查兩種持久化後的文件是否出現錯誤
2.安裝redis
(1)編譯安裝方式
無需configure,直接make便可編譯;複製陽曆配置文件
(2)RPM包安裝Redis
epel源:yuminstall -y redis
注意:
1) 最新版本的能夠在官方站點redis.io或者在pkgs下載RPM包
2) 依賴於jemalloc,高性能分配算法庫
3.配置文件
[root@localhost ~]#vim /etc/redis.conf
(1)GENERAL配置段
daemonize no |
是否以守護進程運行,默認爲no;可是基於腳本啓動依然運行爲守護進程 |
pidfile /var/run/redis/redis.pid |
pid文件 |
port 6379 |
監聽端口6379/tcp |
tcp-backlog 511 |
tcp-backlog(等待隊列)的長度 |
bind 127.0.0.1 |
監聽地址;本地建議監聽在unixsocket在內存中直接交換 |
timeout 0 |
客戶端鏈接超時時間,0不超時 |
tcp-keepalive 0 |
tcp-keepalive功能 |
loglevel notice |
日誌級別 |
logfile /var/log/redis/redis.log |
日誌文件 |
databases 16 |
內部數據集合數量,默認都放置0號數據庫,在分佈式狀況下不支持多庫存儲 |
(2)SNAPSHOTTING:快照持久化配置段
save <seconds> <changes>:保存數據庫在磁盤上;在多少秒多、少記錄發生變化作一次快照
實例:
save " " :禁用RDB格式的持久化功能
save 900 1:在900秒至少有一個鍵發生變化就進行一次持久化
save 300 10:在300秒內10個鍵發生變化
save 60 10000:在60秒內10000個鍵發生變化
(3)REPLICATION:複製相關配置
slaveof <masterip><masterport>:指明該服務器是哪一個Redis主服務器的從服務器,指明主服務器的IP和端口
注意:當啓用該選項,表示爲Redis主服務器
slave-read-only yes:從服務器是不是隻讀
(4) SECURITY:安全相關的配置
(5) LIMITS:限制相關的配置
maxclients 10000:最大的併發客戶端數量
maxmemory<bytes>:最大內存使用數量
(6) APPEND ONLY MODE:AOF持久化功能配置段
appendonly no:禁用AOF持久化功能
appendfilename"appendonly.aof":保存文件名稱
appendfsync everysec:是否使用fsync功能
注意:
兩種持久化方式能夠並行使用,不衝突
(7) LUA SCRIPTING:Lua腳本配置段
lua-time-limit5000
(8) SLOW LOG:慢查詢日誌配置段
(9) LATENCY MONITOR:監控功能配置段
(10) Event notification :事件通知機制配置段,和發佈訂閱相關
(11) ADVANCED CONFIG :高級配置,鍵和某些集合如何工做的屬性
4.啓動服務
[root@localhost ~]#systemctl start redis
[root@localhost ~]#systemctl status redis
[root@localhost ~]#ss -tnl
5.redis-cli命令行接口鏈接服務
(1)鏈接服務器
格式:redis-cli [OPTIONS] [cmd [arg [arg ...]]]
-h <hostname> :指明主機地址
-p <port>:指明端口
-s <socket>:當本地鏈接時候指明套接字
-a <password>:指明認證密碼
-r <repeat>:把指定命令執行N次
Examples:
cat /etc/passwd | redis-cli -x set mypasswd
redis-cli get mypasswd
redis-cli -r 100 lpush mylist x
redis-cli -r 100 -i 1 info | grepused_memory_human:
redis-cli --eval myscript.lua key1 key2 ,arg1 arg2 arg3
redis-cli --scan --pattern '*:12345*'
注意:
默認是不啓用認證功能的,能夠直接鏈接使用
(2)獲取幫助
由於redis功能強大,當獲取幫助時候須要指明具體方面
Type:
"help @<group>" to get a list ofcommands in <group>:指明命令組,
"help <command>" for help on<command>:指明具體命令
"help <tab>" to get a list of possible help topics:能夠經過TAB鍵提示
實例:
[root@localhost~]# redis-cli -h 127.0.0.1
127.0.0.1:6379>help @STRING
127.0.0.1:6379>help APPEND