中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redis學習筆記(一):Redis常用數據類型之string、hash和list的命令

發布時間:2020-07-20 23:03:15 來源:網絡 閱讀:644 作者:程序猿洞曉 欄目:軟件技術

微信公眾號

Redis學習筆記(一):Redis常用數據類型之string、hash和list的命令
redis是日常開發中最常的非關系型數據庫,可以說只要是個項目基本都會使用到。常用來做數據緩存、分布式鎖等等。redis的基本安裝內容就不說了(在之前的博客搭建系列里面有提到redis的安裝使用,如果不會的可以看一下),后面更新會說一下其配置文件中主要的配置信息。

redis常用的數據類型str、hash、list、set、zset,但是最常用的應該就是前三種,這篇文章里面就是用來記錄和說明這前三種數據類型常使用的命令。雖然在實際開發過程中很少使用這些命令,但是了解這些命令,會更有利于對redis相關API的理解和使用。

redis為什么快

redis為什么速度這么快,這是面試常見的面試題,更是項目中使用它的原因。

  • redis是使用C語言編寫,更接近底層的編程語言
  • redis是基于內存存儲數據,獲取和存儲數據都是在內存中
  • redis是單線程處理,沒有鎖的競爭,減少了性能消耗,雖然是單線程,處理速度上并不慢,因為其是基于內存做處理,沒有和磁盤間繁瑣的讀寫IO過程(具體redis單線程原理,后期會再更新博客詳細說明)

redis數據類型之str

字符串類型是最常用的,可能很多簡單小型項目用來緩存數據都只會用到這一種數據類型。

常用命令
  • set key value [ex seconds] [px milliseconds] [nx|xx]:存儲數據,key是鍵唯一,值是字符串類型,用來存儲真正的數據信息,ex和px表示設置其有效時間,對應的單位分別是秒和毫秒,nx和xx表示存儲數據是否可以被覆蓋,如果key已經存在,返回為0,表示沒有設置成功,如果key不存在返回為1,表示設置成功,xx是set命令默認的存儲方式,可覆蓋

    ### 直接存儲數據
    set name joker
    ### 加上有效時間為10秒
    set name joker ex 10
    ### 加上有效時間為10000毫秒
    set name joker px 10000
    ### 不可覆蓋+有效時間
    set name itcrud ex 10 nx

    這里需要注意,當使用nx或者xx的時候,前面需要有有效時間,如果只需要使用nx,不需要設置有效時間也是可以的,但是命令是不同,看下面setnx命令。

  • get key:根據key獲取value值

    get name
  • mset keys values:批量存儲鍵值數據,如果客戶端同時有大量數據執行存儲,每條數據都連接一次redis,會增大連接過程的資源消耗,效率上也會大打折扣,這時便可以使用批量存儲方式

    ## 同時設置三條數據,key分別是:name、age、blog,值分別是:joker、30、blog.itcrud.com
    mset name joker age 30 blog blog.itcurd.com
  • mget keys:輸入批量鍵,獲取批量的值,多個key用空格隔開即可

    mget name age blog
  • incr key:key對應value值自增1操作,比如投票的時候常用,value必須為整數才可以

    incr age
  • incrby key increment:key對應的value值增長increment指定的值,value同樣要為整數

    incrby age 3
  • decr key:key對應value值減1的操作,value必須為整數

    decr age
  • decrby key decrement:key對應value值減decrement指定的值,value必須為整數

    decrby age 1
  • incrbyfloat key increment:key對應的value值增加increment指定的值,value可以為整數或者浮點數都可以

    incrbyfloat score 1.1
  • setnx key value:不可覆蓋的設置值,當key已經存在,setnx返回為0,表示沒有設置成功,如果key不存在返回為1,表示設置成功

    setnx name joker
  • strlen key:獲取key對應的value值長度

    strlen name
  • getrange key start end:截取字符串,包含start和end

    ## 獲取的字符串為"it"
    set name itcrud
    getrange name 0 1

redis數據類型之hash

hash結構的如圖所示:

Redis學習筆記(一):Redis常用數據類型之string、hash和list的命令

hash類型很適合存儲一些對象信息。把field變為字段名,把字段值變為filed對應的value值,其中數據的唯一標識放在key上面。

常用命令
  • hset key field value:設置值

    hset user:1 name joker
  • hmset key fields values:批量設置值

    hmset user:1 name joker age 30 blog blog.itcrud.com
  • hget kye field:獲取單個值

    hget user:1 name
  • hmget key fileds:批量獲取值

    hget user:1 name age blog
  • hgetall key:獲取key下的所有鍵值對

    hgetall user:1
  • hdel key fields:刪除key下的某個鍵值對,支持批量刪除,指定多個field即可

    hdel user:1 name age
  • hlen key:獲取當前key下鍵值對的數量

    hlen user:1
  • hexists key field:查詢key下,指定的field是否存在,

    hexists user:1 name
  • hkeys key:獲取key下所有的filed列表

    hkeys user:1
  • hvals key:獲取key下的所有value列表

    hvals user:1
  • hincrby key field increment:對key的field對應value值做增加的操作,增加的值為increment指定的值,只支持整數

    hincrby user:1 age 2
  • hincrbyfloat key field increment:對key的field對應value值做增加的操作,增加的值為increment指定的值,可以是整數或者浮點數

    hincrbyfloat user1 score 1.1

redis數據類型之list

list最常見的是被用為隊列,一個key下面可以存儲一個有序的字符串隊列,單個隊列可以存儲2的32次方減1個元素。基本的數據結構圖如下:

Redis學習筆記(一):Redis常用數據類型之string、hash和list的命令

常用命令
  • rpush key values:從右側推入元素,可以同時推入多個

    ## 從右側依次推入a、b、c三個元素
    rpush itcrud a b c
  • lpush key values:從左側推入元素,可以同時推入多個

    ## 從左側依次推入a、b、c三個元素
    lpush itcrud a b c
  • lrange key start end:根據index獲取指定范圍內的元素,包含start和end的元素

    ## 獲取全量元素,0表示左側開始的第一個元素,-1表示從右側開始的第一個元素
    lrange itcrud 0 -1
  • linsert key before|after pivot value:在指定元素的前面或者后面插入元素

    ## 在b的前面插入新元素m
    linsert itcrud before b m
  • lindex key index:獲取指定index位置的元素

    lindex itcrud -2
  • llen key:獲取列表的長度

    llen itcrud
  • lpop key:從左側彈出元素

    lpop itcrud
  • rpop key:從右側彈出元素

    rpop itcrud

說明:關于list的index還是需要說一下,當index計數是從左到右,就是從0開始。但是index計數是從右到左,就是從-1開始。如下圖:

Redis學習筆記(一):Redis常用數據類型之string、hash和list的命令

總結

三種數據類型都已經說完了,但是這里還需要補充一個內容,是平時我們項目中使用redis的習慣,以及其他主要的使用習慣的對比。

三種方案實現用戶信息存儲
  • 直接用字符串的方式存儲(分散存儲),存儲方式如下:

    set user:1:name joker
    set user:1:age 30
    set user:1:gender male

    這種存儲的缺點是鍵的冗余太多,我們都知道redis是存儲在內存里面,內存空間是很珍貴的,這個存儲太浪費啦,另外這樣存儲過于分散,不利于使用。缺點和優點都是相對的,這樣存儲更為直觀。但是實際上這個優點并沒有什么用。

  • 將對象序列化成字符串,存儲方式如下:

    ## 將user序列化成json字符串:jsonUser
    set user:1 jsonUser

    優點:編程簡單,序列化合理,內存使用率高

    缺點:序列化的反序列化過程以及客戶端和服務端建立連接有一定的開銷。如果只是修改用戶中的一個字段,都需要經歷查詢、反序列化、修改值、序列化、再set設置值。

    • 使用hash數據類型
    hmset user:1 name joker age 30 gender male

    優點:簡單直觀,相對于序列化內存消耗會高一點,每次修改只需要建立一次連接,操作簡便

    缺點:要控制ziplist與hashtable兩種編碼轉換,且hashtable會消耗更多的內存

    三種方式各有優缺點,可以對比使用,沒有絕對的優勢,也沒有絕對的劣勢,看實際項目的需求,我們項目里使用的第二種方式,序列化對象,因為json轉換對象很方便。如果是采用第三種,在數據和對象的轉換過程會更為復雜。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

云阳县| 瓦房店市| 寿宁县| 河津市| 阜南县| 泰来县| 昌平区| 澄城县| 青州市| 新乐市| 安阳县| 涿鹿县| 曲沃县| 顺昌县| 宁强县| 密山市| 吉水县| 成都市| 怀柔区| 泽普县| 浑源县| 博野县| 二连浩特市| 新宁县| 那曲县| 德令哈市| 金平| 凤翔县| 防城港市| 辰溪县| 同江市| 桐庐县| 遂昌县| 南和县| 九寨沟县| 丰顺县| 北京市| 柞水县| 赣州市| 昌江| 安丘市|