redis基礎

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;  刪除一個指定的命令  

相關文章
相關標籤/搜索