天天看點

JAVAWEB開發之redis學習(一)——redis重點介紹、redis應用場景以及redis的安裝運作redis學習目标redis簡介redis應用場景redis的下載下傳安裝和運作本機或同一區域網路内的機器連接配接Linux伺服器

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版

JAVAWEB開發之redis學習(一)——redis重點介紹、redis應用場景以及redis的安裝運作redis學習目标redis簡介redis應用場景redis的下載下傳安裝和運作本機或同一區域網路内的機器連接配接Linux伺服器

(2)上傳到Linux伺服器

JAVAWEB開發之redis學習(一)——redis重點介紹、redis應用場景以及redis的安裝運作redis學習目标redis簡介redis應用場景redis的下載下傳安裝和運作本機或同一區域網路内的機器連接配接Linux伺服器

(3)在伺服器上解壓Linux源碼并進入目錄 (4)make進行編譯(可選  make test)輸入make并回車 發現出現錯誤如下所示

JAVAWEB開發之redis學習(一)——redis重點介紹、redis應用場景以及redis的安裝運作redis學習目标redis簡介redis應用場景redis的下載下傳安裝和運作本機或同一區域網路内的機器連接配接Linux伺服器

這是因為redis使用C語言編寫的,需要安裝激活C語言編譯器的插件 需要使用yum install gcc 即可 成功安裝gcc後 再進行make又出現了以下錯誤   

JAVAWEB開發之redis學習(一)——redis重點介紹、redis應用場景以及redis的安裝運作redis學習目标redis簡介redis應用場景redis的下載下傳安裝和運作本機或同一區域網路内的機器連接配接Linux伺服器

上網查了以下輸入指令: make MALLOC=libc  便可解決 (5)安裝到指定目錄 例如:/usr/local/redis   make PREFIX=/usr/local/redis  install

JAVAWEB開發之redis學習(一)——redis重點介紹、redis應用場景以及redis的安裝運作redis學習目标redis簡介redis應用場景redis的下載下傳安裝和運作本機或同一區域網路内的機器連接配接Linux伺服器

(6) 将源碼根目錄下的redis.conf配置檔案copy到安裝redis的根目錄下 不然 沒有配置檔案無法運作  

JAVAWEB開發之redis學習(一)——redis重點介紹、redis應用場景以及redis的安裝運作redis學習目标redis簡介redis應用場景redis的下載下傳安裝和運作本機或同一區域網路内的機器連接配接Linux伺服器

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伺服器後效果如下

JAVAWEB開發之redis學習(一)——redis重點介紹、redis應用場景以及redis的安裝運作redis學習目标redis簡介redis應用場景redis的下載下傳安裝和運作本機或同一區域網路内的機器連接配接Linux伺服器

第二步:開啟用戶端 指令:./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的程序 連接配接測試如下

JAVAWEB開發之redis學習(一)——redis重點介紹、redis應用場景以及redis的安裝運作redis學習目标redis簡介redis應用場景redis的下載下傳安裝和運作本機或同一區域網路内的機器連接配接Linux伺服器

注意: 可以使用ps -ef|grep redis 檢視redis程序, 使用kill -9 pid 殺死程序 使用netstat -nltp|grep redis  檢視redis伺服器程序端口的聯網資訊 如下所示: 重新再開啟一個指令視窗

JAVAWEB開發之redis學習(一)——redis重點介紹、redis應用場景以及redis的安裝運作redis學習目标redis簡介redis應用場景redis的下載下傳安裝和運作本機或同一區域網路内的機器連接配接Linux伺服器

本機或同一區域網路内的機器連接配接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伺服器。 再使用别的主機用戶端就可以進行連接配接了 如下所示

JAVAWEB開發之redis學習(一)——redis重點介紹、redis應用場景以及redis的安裝運作redis學習目标redis簡介redis應用場景redis的下載下傳安裝和運作本機或同一區域網路内的機器連接配接Linux伺服器

繼續閱讀