1、什麼是redislinux
redis是一個開源的,內存中的數據結構存儲系統,key-value的非關係型數據庫,它能夠做爲數據庫,緩存和消息中間件,支持持久化。redis
2、redis的安裝和卸載shell
1.版本爲奇數的是不穩定版本。爲偶數的是穩定版本。數據庫
2.官網下載redis,也可一在linux中使用wget命令下載;wget -P 存放位置 redis的下載路徑。json
3.在linux下進行解壓:tar -xvf redis緩存
4.經過./redis-server 啓動redis,要使用客戶端鏈接redis 不能直接在當前窗口中鏈接,使用Xshell 從新打開一個窗口,進入到redis目錄,運行./redis-cli,輸入keys *能夠查看tomcat
5.若是想在同一個窗口啓動客戶端,須要複製(cp 源文件 目標位置) redsi.conf,而後修改redis.conf中的 daemonize 的值爲yes(設置redis爲守護進程),此時能夠經過 redis-server redis.conf啓動redis,而後再啓動客戶端 ./redis-cli數據結構
6.退出redis 可使用 ps-ef|grep redis 查看redis的端口,而後使用kill 殺死進程 (kill -p 進程id);併發
7.卸載:直接刪除redis 文件便可 (rm -rf redis) 強制刪除。分佈式
3、redis的數據結構
1.字符串類型:String key是字符串類型,value是字符串類型
啓動redis的客戶端
單值緩存
set key value
get key 若是不存在key 則返回nil
在redis的官方文檔中---命令中包含這些命令
對象緩存
set user :1 value(json格式數據) (1是這一條數據的主鍵,根據響應的條數變換,value是數據庫中的一條數據)
mset user:1:name zhagnsan user:1:balance 180 (批量存儲----將數據庫中的一整條數據所有按照鍵值對的形式存儲)
mget user:1:name user:1:balance (批量獲取)
分佈式鎖:
應用場景(好比用戶下單某個商品,那該商品對應的庫存是否是應該相應的減1呢?一個用戶用set沒有問題,可是,若是多個用戶同時下單,不一樣的tomcat都去執行set操做,那他們拿到的庫存值是同樣的,執行減1的操做以後,結果就是多個用戶購買商品,庫存只減了一次,而用setnx,第一個tomcat在setnx庫存的時候,其餘tomcat在去設置的時候,就會返回0 ,這樣就解決了上述問題,在setnx使用完以後,del 釋放一下)
setnx product:100 true 返回1表明獲取鎖成功(setnx和set的區別是 setnx發現有key存在的時候,不會更新)
setnx product:100 true 返回0表明獲取鎖失敗
del product :100 執行完業務釋放鎖
計數器:
incr key 將key中存儲的數字值加1 eg:incr 文章名:閱讀量:100(redis是單線程的,能防止併發問題,他會按照訪問的前後順序將他們放到隊列中,按順序執行)
decr key 將key中存儲的數字值減1
incrby key increment 將key中存儲的值加上increment
decrby key decrement 將key中存儲的值減去 decrement
2.哈希:hash
hash類型設置語法:hset 鍵 field value;一個鍵能夠有不少個field,很適合存儲一個對象
eg:一個hash存user鍵,有name和age兩個字段:
hset user name xxx;
hset user age xxx;
hkeys user ;查看這個鍵有哪些字段
hlen user ;查看這個鍵的字段長度
hget user name ;獲取name的值
3.list
redis支持list數據結構,底層是一個雙向鏈表,容許重複值存在,按照插入順序保存,可使用lpush從左邊插入,也可使用rpush從右邊插入。lpop從左邊彈出,rpop從右邊彈出,從而實現FIFO隊列思想(先進先出,從左邊插入,右邊彈出,插入和彈出方向不一樣,就能夠實現。),插入和彈出方向相同,實現棧的思想
eg:
lpush hobbys xxx
lpush hobbys yyy
lpush hobbys zzz
lrange hobbys 0 -1 ; 查看存放的值的個數
rpop hobbys (從右邊彈出,實現隊列思想---先進先出)
lpop bobbys (從左邊彈出,實現棧的思想 --先進後出)
4.set
redsi 的set 是String 類型的無序集合,集合成員是惟一的。這就意味着集合中不能出現重複的數據。
eg:
sadd num 1 插入set集合
sadd num 2
sadd num 3
SMEMBERS num 查看set集合中的數據
spop num 彈出set集合中的數據(彈出來的值是隨機的)
5.有序集合 :sorted set
sorted set 是set 的升級,它在set的基礎上增長了一個順序屬性。這一屬性在修改添加元素的時候能夠指定,每次指定後,zset會自動重新按新的值調整順序。
eg:
zadd person 1 xxx 插入 有序結合
zadd person 2 yyy
zadd person 3 zzz
zrange person 0 -1 查看有序集合中的數據(此時會根據分數排序 zrange person 0 -1 withscores 會把值對應的分數值打印出來)
若是在插入的時候,分數值相同,會根據插入的值進行字典排序
zadd person 3 sss
zadd person 3 ddd
zadd person 3 aaa
zrange person 0 -1 withscores 9查詢的結果是 aaa 3 ddd 3 sss 3
zrem person xxx; 刪除一個指定的命令