redis基本語法和應用場景
redis支援5種資料型別,包括String(字串)、Hash(詞典)、List(列表)、Set(集合)、Sort Set(有序集合),簡單介紹一下每種資料結構的用法和應用場景。
一、String(字串)
redis的字串是位元組序列,在redis中是二進位制安全的,String是最常用的一種資料型別,普通的key/value儲存都可以歸為此類。常用的命令有:get、set、incr、decr、mget等;
應用場景:
1.想知道什麼時候封鎖一個IP地址(訪問超過幾次)。INCRBY命令讓這些變得很容易,通過原子遞增保持計數。
2.通過INCR生成訂單id(redis是單執行緒安全的);
二、Hash(字典)
redis hash是雜湊鍵值對的集合。 redis的雜湊值是字串欄位和字串值之間的對映,常被用來儲存物件,常用命令有:hget,hset,hgetall;
應用場景:比如要儲存使用者資訊,使用者id作為key,使用者的資訊name、age、mobile作為hash鍵值對儲存;
三、List(列表)
redis list的實現為一個雙向連結串列,即可以支援反向查詢和遍歷,更方便操作,不過帶來了部分額外的記憶體開銷,redis內部的很多實現,包括髮送緩衝佇列等也都是用的這個資料結構。常用命令:lpush,rpush,lpop,rpop,lrange等;
應用場景:
1.利用Lists的PUSH操作,將任務存在Lists中,然後工作執行緒再用POP操作將任務取出進行執行,可以實現訊息佇列的操作;
2.我們專案的關注列表、粉絲列表等都是用Redis的list結構來實現的;
四、Set(集合)
Set集合是redis字串的無序集合,儲存的是沒有重複的列表資料,Set內部是通過HashMap實現的。常用命令:sadd,srem,spop,sdiff ,smembers,sunion 等;
應用場景:比如在微博應用中,每個人的好友存在一個集合(set)中,這樣求兩個人的共同好友的操作,可能就只需要用求交集命令即可。
五、Sort Set(有序集合)
redis有序集合類似於redis集合,不同的是Sort Set集合是有序的。一個有序集合的每個成員帶有分數,用於進行排序。常用命令:zadd,zrange,zrem,zcard等;
應用場景:redis sorted set的使用場景與set類似,區別是set不是自動有序的,而sorted set可以通過使用者額外提供一個優先順序(score)的引數來為成員排序,並且是插入有序的,即自動排序。當你需要一個有序的並且不重複的集合列表,那麼可以選擇sorted set資料結構,比如twitter 的public timeline可以以發表時間作為score來儲存,這樣獲取時就是自動按時間排好序的。
又比如使用者的積分排行榜需求就可以通過有序集合實現。還有上面介紹的使用List實現輕量級的訊息佇列,其實也可以通過Sorted Set實現有優先順序或按權重的佇列。