Redis緩存應(yīng)用基礎(chǔ)

Redis緩存應(yīng)用基礎(chǔ)

1、Redis簡介

Redis是一個key-value存儲系統(tǒng)。和Memcached類似,它支持存儲的value類型相對更多:String(字符串)、List(鏈表)、Set(集合)、ZSet(有序集合)和Hash(哈希類型)。與Memcached一樣,為了保證效率,數(shù)據(jù)都是緩存在內(nèi)存中。較大區(qū)別是Redis會周期性的把更新的數(shù)據(jù)寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎(chǔ)上實現(xiàn)了master-slave(主從)同步。

Redis 是一個高性能的key-value數(shù)據(jù)庫。目前相對較優(yōu)秀的NoSQL數(shù)據(jù)庫。單線程支持10w+QPS。

2、Redis安裝 (Mac OSX)

  1. 官網(wǎng) https://redis.io 下載最新版本,目前是Redis 5.0.3;

2)本地文件解壓到目錄:/usr/local/redis-5.0.3

3)編譯源程序,進入redis目錄

make

4)啟動redis服務(wù),進入Redis/bin目錄

./redis-server ../redis.conf

?  bin ./redis-server ../redis.conf
30578:C 18 Mar 2019 17:43:18.825 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
30578:C 18 Mar 2019 17:43:18.825 # Redis version=5.0.3, bits=64, commit=00000000, modified=0, pid=30578, just started
30578:C 18 Mar 2019 17:43:18.825 # Configuration loaded
30578:M 18 Mar 2019 17:43:18.826 * Increased maximum number of open files to 10032 (it was originally set to 256).
              _._                                                  
         _.-``__ ''-._                                             
    _.-``    `.  `_.  ''-._           Redis 5.0.3 (00000000/0) 64 bit
.-`` .-```.  ```\/    _.,_ ''-._                                   
(    '      ,       .-`  | `,    )     Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
|    `-._   `._    /     _.-'    |     PID: 30578
`-._    `-._  `-./  _.-'    _.-'                                   
|`-._`-._    `-.__.-'    _.-'_.-'|                                  
|    `-._`-._        _.-'_.-'    |           http://redis.io        
`-._    `-._`-.__.-'_.-'    _.-'                                   
|`-._`-._    `-.__.-'    _.-'_.-'|                                  
|    `-._`-._        _.-'_.-'    |                                  
`-._    `-._`-.__.-'_.-'    _.-'                                   
    `-._    `-.__.-'    _.-'                                       
        `-._        _.-'                                           
            `-.__.-'                                               

30578:M 18 Mar 2019 17:43:18.827 # Server initialized
30578:M 18 Mar 2019 17:43:18.828 * DB loaded from disk: 0.000 seconds
30578:M 18 Mar 2019 17:43:18.828 * Ready to accept connections

5)通過redis-cli連接使用

./redis-cli

-rwxrwxrwx   1 root     staff   247K  2 13 16:48 redis-cli
-rwxrwxrwx   1 root     staff   1.3M  2 13 16:48 redis-server
?  bin ./redis-cli
127.0.0.1:6379> keys *

6)Redis的配置文件

 ```
 daemonize:如需要在后臺運行,把該項的值改為yes
 pdifile:把pid文件放在/var/run/redis.pid,可以配置到其他地址
 bind:指定redis只接收來自該IP的請求,如果不設(shè)置,那么將處理所有請求,在生產(chǎn)環(huán)節(jié)中最好設(shè)置該項
 port:監(jiān)聽端口,默認為6379
 timeout:設(shè)置客戶端連接時的超時時間,單位為秒
 loglevel:等級分為4級,debug,revbose,notice和warning。生產(chǎn)環(huán)境下一般開啟notice
 logfile:配置log文件地址,默認使用標準輸出,即打印在命令行終端的端口上
 database:設(shè)置數(shù)據(jù)庫的個數(shù),默認使用的數(shù)據(jù)庫是0
 save:設(shè)置redis進行數(shù)據(jù)庫鏡像的頻率
 rdbcompression:在進行鏡像備份時,是否進行壓縮
 dbfilename:鏡像備份文件的文件名
 dir:數(shù)據(jù)庫鏡像備份的文件放置的路徑
 slaveof:設(shè)置該數(shù)據(jù)庫為其他數(shù)據(jù)庫的從數(shù)據(jù)庫
 masterauth:當主數(shù)據(jù)庫連接需要密碼驗證時,在這里設(shè)定
 requirepass:設(shè)置客戶端連接后進行任何其他指定前需要使用的密碼
 maxclients:限制同時連接的客戶端數(shù)量
 maxmemory:設(shè)置redis能夠使用的最大內(nèi)存
 appendonly:開啟appendonly模式后,redis會把每一次所接收到的寫操作都追加到appendonly.aof文件中,當redis重新啟動時,會從該文件恢復(fù)出之前的狀態(tài)
 appendfsync:設(shè)置appendonly.aof文件進行同步的頻率
 vm_enabled:是否開啟虛擬內(nèi)存支持
 vm_swap_file:設(shè)置虛擬內(nèi)存的交換文件的路徑
 vm_max_momery:設(shè)置開啟虛擬內(nèi)存后,redis將使用的最大物理內(nèi)存的大小,默認為0
 vm_page_size:設(shè)置虛擬內(nèi)存頁的大小
 vm_pages:設(shè)置交換文件的總的page數(shù)量
 vm_max_thrrads:設(shè)置vm IO同時使用的線程數(shù)量
 
 ```

3、基本命令應(yīng)用

1)String 字符串

127.0.0.1:6379> SET name Brace
OK
127.0.0.1:6379> get name
"Brace"
127.0.0.1:6379> setnx name Good
(integer) 0
127.0.0.1:6379> 

重點說明 SETNX

只在鍵 key 不存在的情況下, 將鍵 key 的值設(shè)置為 value 。
若鍵 key 已經(jīng)存在, 則 SETNX 命令不做任何動作。
SETNX 是『SET if Not eXists』(如果不存在,則 SET)的簡寫。
返回值
命令在設(shè)置成功時返回 1 , 設(shè)置失敗時返回 0 。

SETEX:常用的SETEX ,當我們設(shè)置key的值時,同時會設(shè)置其過期時間。
將鍵 key 的值設(shè)置為 value , 并將鍵 key 的生存時間設(shè)置為 seconds 秒鐘。
如果鍵 key 已經(jīng)存在, 那么 SETEX 命令將覆蓋已有的值。
SETEX 命令的效果和以下兩個命令的效果類似:

SET key value
EXPIRE key seconds # 設(shè)置生存時間
SETEX 和這兩個命令的不同之處在于 SETEX 是一個原子(atomic)操作, 它可以在同一時間內(nèi)完成設(shè)置值和設(shè)置過期時間這兩個操作, 因此 SETEX 命令在儲存緩存的時候非常實用。
返回值
命令在設(shè)置成功時返回 OK 。 當 seconds 參數(shù)不合法時, 命令將返回一個錯誤

2)HASH 哈希表

```
127.0.0.1:6379> hset hName nickname "zhangsan"
(integer) 1
127.0.0.1:6379> hget hName nickname
"zhangsan"
127.0.0.1:6379> hexists hName nickname
(integer) 1
127.0.0.1:6379> hexists hName uid
(integer) 0
127.0.0.1:6379> hlen hName
(integer) 1
127.0.0.1:6379> hincrby hName uid 3
(integer) 3
127.0.0.1:6379> hget hName uid
"3"
127.0.0.1:6379> hset hName age 20
(integer) 1
127.0.0.1:6379> hmset hName nickname "lisi" age 12
OK
127.0.0.1:6379> hmget hName nickname uid age
1) "lisi"
2) "3"
3) "12"
127.0.0.1:6379> hkeys hName
1) "nickname"
2) "uid"
3) "age"
127.0.0.1:6379> hvals hName
1) "lisi"
2) "3"
3) "12"
127.0.0.1:6379> hgetall hName
1) "nickname"
2) "lisi"
3) "uid"
4) "3"
5) "age"
6) "12"
127.0.0.1:6379> 

```
  1. LIST 列表

BRPOP 是列表的阻塞式(blocking)彈出原語。
它是 RPOP key 命令的阻塞版本,當給定列表內(nèi)沒有任何元素可供彈出的時候,連接將被 BRPOP 命令阻塞,直到等待超時或發(fā)現(xiàn)可彈出元素為止。

當給定多個 key 參數(shù)時,按參數(shù) key 的先后順序依次檢查各個列表,彈出第一個非空列表的尾部元素。
關(guān)于阻塞操作的更多信息,請查看 BLPOP key [key …] timeout 命令, BRPOP 除了彈出元素的位置和 BLPOP key [key …] timeout 不同之外,其他表現(xiàn)一致。

返回值
假如在指定時間內(nèi)沒有任何元素被彈出,則返回一個 nil 和等待時長。 反之,返回一個含有兩個元素的列表,第一個元素是被彈出元素所屬的 key ,第二個元素是被彈出元素的值。


127.0.0.1:6379> LPUSH list 1 2 3 4 5
(integer) 5
127.0.0.1:6379> LPUSH list 6
(integer) 6
127.0.0.1:6379> lrange list 0 6
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"
127.0.0.1:6379> lpop list
"6"
127.0.0.1:6379> rpop list
"1"
127.0.0.1:6379> rpoplpush list list2
"2"
127.0.0.1:6379> lrange list2  0 5
1) "2"
127.0.0.1:6379> lrange list 0 5
1) "5"
2) "4"
3) "3"
127.0.0.1:6379> lrem list 2 4
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "3"
127.0.0.1:6379> lpush list 5
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "5"
3) "3"
127.0.0.1:6379> lrem list 2 5
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "3"
127.0.0.1:6379> brpop list 30
1) "list"
2) "3"
127.0.0.1:6379> brpop list 30 list2 20
1) "list2"
2) "2"
127.0.0.1:6379> 


  1. SET 集合 (ZSET)
127.0.0.1:6379> sadd set "goods"
(integer) 1
127.0.0.1:6379> sadd set "this" "is"
(integer) 2
127.0.0.1:6379> smembers set
1) "is"
2) "this"
3) "goods"
127.0.0.1:6379> spop set is
(error) ERR value is not an integer or out of range
127.0.0.1:6379> spop set 1
1) "goods"
127.0.0.1:6379> smembers set
1) "is"
2) "this"
127.0.0.1:6379> SRANDMEMBER set 2
1) "is"
2) "this"
127.0.0.1:6379> SRANDMEMBER set 1
1) "is"
127.0.0.1:6379> SRANDMEMBER set 1
1) "is"
127.0.0.1:6379> SRANDMEMBER set 1
1) "this"
127.0.0.1:6379> srem set this
(integer) 1
127.0.0.1:6379> smembers set
1) "is"

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Redis從入門到精通:中級篇 本文目錄 上一篇文章以認識Redis為主,寫了Redis系列的第一篇,現(xiàn)在開啟第二...
    叨唧唧的閱讀 783評論 0 0
  • Ubuntu下安裝redis 安裝redis 在 Ubuntu 系統(tǒng)安裝 Redi 可以使用以下命令: 啟動 Re...
    riverstation閱讀 1,046評論 0 0
  • NoSQL介紹 一類新出現(xiàn)的數(shù)據(jù)庫(not only sql),它的特點: 不支持SQL語法 存儲結(jié)構(gòu)跟傳統(tǒng)關(guān)系型...
    瘦不下去了閱讀 313評論 0 0
  • 重點參考鏈接: http://www.cnblogs.com/wangyuyu/p/3786236.html Re...
    Kevin_Junbaozi閱讀 2,264評論 0 21
  • 做一個大方的人: 001 誰都不喜歡摳門的人。 002 如果你持續(xù)大方,大家就會認定你是一個不會讓他人吃虧的人,會...
    5239林中漫步閱讀 252評論 0 4

友情鏈接更多精彩內(nèi)容