redis學習目标
1.redis特點及安裝 2.redis鍵值操作 3.redis資料類型[string, link,set,orderset,hash] 4.事務 5.消息訂閱 6.持久化 7.叢集 8.運維
redis簡介
redis是開源BSD許可進階的key-value存儲系統(NoSQL) 可以用來存儲字元串,哈希結構,連結清單,集合,是以,常用來提供資料結構服務。 redis和memcached相比的獨特之處: 1.redis可以用來存儲(storage),而memcached是用來做緩存(cache)。redis這個特點主要因為其有持久化功能。 2.redis中存儲的資料有多種結構,而memcached存儲的資料隻有一種類型"字元串"
redis應用場景
場景1:取最新N個資料的操作
比如典型的取網站中的最新文章,通過下面方式可以将最新的5000條評論放在redis的list集合中,并将超出集合部分從資料庫擷取。
(1)使用LPUSH latest.comments <ID> 指令,向list集合中插入資料 (2)插入完成後再用LTRIM latest.comments 0 5000指令使其永遠隻儲存5000個ID (3)然後我們在用戶端擷取某一頁評論時可以使用下面的邏輯(僞代碼)
# 僞代碼
FUNCTION get_latest_comments(start, num_items):
id_list = redis.lrange("latest.comments", start, start+num_items-1)
IF id_list.length < num_items
id_list = SQL_DB("SELECT ... ORDER BY time LIMIT ...")
END
RETURN id_list
END
如果還有不同的篩選次元,比如某個分類的最新N條,那麼可以再建一個按此分類的List,隻存ID的話,redis是非常高效。 場景2:排行榜應用,取TOP N操作 這個需求與上面需求的不同之處在于,前面以時間為權重,這個是以某個條件為權重,比如按頂的次數排序,這時就需要我們的sorted set,将需要排序的值設定成sorted set的score,将具體的資料設定成相應的value,每次隻需要執行一條ZADD指令即可。 場景3:需要精準設定過期時間的應用 比如你可以把上面所說的sorted set的score值設定成過期時間的時間戳,那麼就可以簡單的通過過期時間排序,定時清除過期資料了,不僅可以清除redis中的過期資料,你完全可以把redis裡這個過期時間當成是資料庫中資料的索引,用redis找出哪些資料需要過期删除,然後再精确的從資料庫中删除相應的記錄。 場景4:計數器應用 redis的指令都是原子性的,你可以輕松的利用INCR,DECR指令來建構計數器系統。 場景5:Uniq操作,擷取某段時間所有資料的排重值 這個最适合使用redis的set資料結構,隻要不斷的将資料往set中扔資料就行了,set集合會自動排重。 場景6:實時系統,反垃圾系統 通過上面所說的set功能,你可以知道某個終端使用者是否執行了某操作,可以找到其操作的集合并進行分析統計。 場景7:Pub/Sub建構實時消息系統 redis的Pub/Sub系統可以建構實時消息系統,比如很多用Pub/Sub建構的實時聊天系統的例子。 場景8:建構隊列系統 使用list可以建構隊列系統。使用sorted set甚至可以建構有有優先級的隊列系統。 場景9:緩存 性能優于Memcached,資料結構多樣化
redis的下載下傳安裝和運作
redis的下載下傳和安裝
(1)到官網(https://redis.io/)下載下傳最新版stable版
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN0LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX90zdNhXV65ENBpXT4FEVkZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39jM3gTNwYzM3EDNwcDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
(2)上傳到Linux伺服器
(3)在伺服器上解壓Linux源碼并進入目錄 (4)make進行編譯(可選 make test)輸入make并回車 發現出現錯誤如下所示
這是因為redis使用C語言編寫的,需要安裝激活C語言編譯器的插件 需要使用yum install gcc 即可 成功安裝gcc後 再進行make又出現了以下錯誤
上網查了以下輸入指令: make MALLOC=libc 便可解決 (5)安裝到指定目錄 例如:/usr/local/redis make PREFIX=/usr/local/redis install
(6) 将源碼根目錄下的redis.conf配置檔案copy到安裝redis的根目錄下 不然 沒有配置檔案無法運作
redis的運作
第一步:首先開啟指定的redis伺服器程序 進入reids安裝根目錄 /usr/local/redis ./bin/redis-server (預設前端運作。背景進城模式:修改對應的conf檔案 設定daemonize yes) 檢視幫助參數如下:
[[email protected] redis]# ./bin/redis-server --help
Usage: ./redis-server [/path/to/redis.conf] [options]
./redis-server - (read config from stdin)
./redis-server -v or --version
./redis-server -h or --help
./redis-server --test-memory <megabytes>
Examples:
./redis-server (run the server with default conf)
./redis-server /etc/redis/6379.conf
./redis-server --port 7777
./redis-server --port 7777 --slaveof 127.0.0.1 8888
./redis-server /etc/myredis.conf --loglevel verbose
Sentinel mode:
./redis-server /etc/sentinel.conf --sentinel
如果不指定任何參數 預設啟動安裝根目錄下的redis.conf配置檔案 首次啟動redis伺服器後效果如下
第二步:開啟用戶端 指令:./bin/redis-cli 可以使用--help 檢視參數(注意:redis伺服器程序不可關閉 否則用戶端無法連接配接,是以需要另外開啟一個視窗執行用戶端操作)
Usage: redis-cli [OPTIONS] [cmd [arg [arg ...]]]
-h <hostname> Server hostname (default: 127.0.0.1).
-p <port> Server port (default: 6379).
-s <socket> Server socket (overrides hostname and port).
-a <password> Password to use when connecting to the server
......
-h 主機名 -p 指定端口号 預設是6379(redis安裝根目錄下可以添加多個配置檔案.conf 在不同的.conf檔案中指定不同的端口和配置) -a 如果配置檔案中設定了密碼 用戶端連接配接時必須使用-a 指定密碼進行授權 如果不指定任何參數,那麼用戶端在連接配接redis服務程序時 預設連接配接本地主機主機端口号為6379的程序 連接配接測試如下
注意: 可以使用ps -ef|grep redis 檢視redis程序, 使用kill -9 pid 殺死程序 使用netstat -nltp|grep redis 檢視redis伺服器程序端口的聯網資訊 如下所示: 重新再開啟一個指令視窗
本機或同一區域網路内的機器連接配接Linux伺服器
需要注意的事項是,在目前的Linux本地主機上是可以連接配接redis服務程序的,但是在别的主機上是無法連接配接的。其解決方案如下: 修改Linux上的redis伺服器的配置檔案 .conf vi /usr/local/redis/redis.conf 然後搜尋bind 即:/bind 預設是bind 127.0.0.1 也就是說預設隻能由Linux伺服器上的redis用戶端才能進行連接配接。 修改為bing 127.0.0.1 192.168.1.4 因為redis伺服器是安裝在Linux上的 是以127.0.0.1表示的是Linux主機位址。是以需要在後面添加你所要連接配接Linux上redis伺服器程序的用戶端所在主機的IP。 也可以使用bind * 允許所有區域網路内的主機進行連接配接 然後儲存。 然後必須關閉redis伺服器所在主機即Linux主機的防火牆,否則會出現connected refused,拒絕連接配接。最好是将防火牆開機啟動關閉。service iptables stop 關閉防火牆 chkconfig iptables off 關閉防火牆開機啟動
然後重新開機redis伺服器。 再使用别的主機用戶端就可以進行連接配接了 如下所示