Redis基礎

一、Redis基礎

  1.概述

      RedisRemote Dictionary Server,遠程字典服務器;發行與2009年,本質上來說,提供一種數據結構的遠程存儲結構;基於BSD開源協定的高級鍵值緩存和存儲。常用於作爲數據結構服務器(data structure server),能夠存儲列表、屬組、字符串、hash、集合、有序集合、Bitmaps以及hyperloglogs

 

  2.特性

    (1)所有數據集必須在內存中運行,性能高

    (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新功能:201541日正式推出

    (1) 對於Cluster功能進行改進

    (2) 新的數據類型:embedded string

    (3) LRU(最近最小使用)算法改進

預設隨機取5個樣本,插入並排序至一個pool,移除最佳者,如此反覆,直到內存用量小於maxmemory設定

樣本數量爲5,多於先前的3

從局部最優趨向於全局最優

 

  5.存儲系統

    RDBMS關係型數據庫:OracleDB2PostgreSQLMySQLSQL Server… ...

    NoSQL非關係型數據庫:CassandraHBaseMemcachedMongoDBRedis… …

key-value NoSQL:鍵值存儲NoSQLMemcachedRedis… ...

Column family NoSQL:列式存儲NoSQLCassandraHbase… ...

Documentation NoSQL:文檔存戶NoSQLMongoDB… ...

Graph NoSQL:圖示存儲NoSQLNeo4j… ...

    NewSQL分佈式的關係型數據庫系統:AerospikefoundationDBrethinkDB

 

 

 

二、RedisMemcached對比

 1.Memcached的優勢

    (1)分佈式的內存對象緩存系統

    (2)支持LRU算法

    (3)多線程;善用多核CPU,更少的阻塞類操作

    (4)更少的內存開銷、內存分配壓力、內存碎片

 

 2.Redis優勢

    (1)豐富的資料形態操作

    (2)內奸replication複製及cluster集羣功能

    (3)就地更新(in-place update) 操作,直接在內存中更新

    (4)支持持久化,避免雪崩效應

 

 

 

三、Redis安裝配置

 1.Redis組件

      redis-server:服務器端

      redis-cli:命令行客戶端,基於Redis協議連入redis服務端

      redis-benchmmarkredis壓力測試工具

      redis-check-dump &redis-check-aof:實現redis檢查的工具,檢查兩種持久化後的文件是否出現錯誤

wKiom1ct9-WQf5ycAAG7ZVEpgeM973.png

 

  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 MODEAOF持久化功能配置段

   appendonly no:禁用AOF持久化功能

   appendfilename"appendonly.aof":保存文件名稱

   appendfsync everysec:是否使用fsync功能

      注意:

            兩種持久化方式可以並行使用,不衝突

     (7) LUA SCRIPTINGLua腳本配置段

    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*'

注意:

    默認是不啓用認證功能的,可以直接連接使用

wKioL1ct-L-B1mqmAAA1hqfhkxw841.png

   (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鍵提示

wKiom1ct9-ahYL_pAAB5f8AG6I0224.png

   實例:

[root@localhost~]# redis-cli -h 127.0.0.1

127.0.0.1:6379>help @STRING

127.0.0.1:6379>help APPEND


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章