# Redis Redis 是一個in-memory的NoSql資料庫,其資料會以key-value的形式存在記憶體中,再Redis中所有的key都是字串。 五大資料型別 --- ### **String** >**最直觀的一種,就是一個key對應一個value。** 基礎指令: * 查詢、新增、刪除資料:get,set,del * 查詢指定區間的資料:getrange,setrange * 多筆查詢、多筆新增:mset,mget * 數字操作:incr,incrby,incrbyfloat,decr,decrby ## **String資料結構示意圖:** ![](https://i.imgur.com/ZX8AqZ1.png) > ## List >**一種鏈結串列,鏈結串列上的每個節點都包含一個value,節點中的value是可重複的。** 基礎操作: * 資料新增與取出:lpush,rpush,lpop,rpopo。 * 資料查詢:lrange,llen * 數字操作:incr,incrby,incrbyfloat,decr,decrby ## **List資料結構示意圖:** ![](https://i.imgur.com/F3m25gE.png) > ## Set >**基本上就是會排除重複key的List集合,且==是無序的==,底層是一個value為null的Hash table,所以新增、刪除、查詢、的複雜度都是O(1)。** 基礎操作: * 資料新增與取出:sadd,srem,smembers,scard,spop。 * 集合操作:sunion,sinter,sdiff。 ## **Set資料結構示意圖:** ![](https://i.imgur.com/ByduA24.png) > ## Zset(Sorted set) >**基本上跟Set一模一樣也是無重複的,差別在於Zset的每個Value都有一個權重值,Zset會==根據這權重值由低到高排序集合==,提供一種有序的Set。** 基礎操作: * 資料新增與取出:zadd,zrange,zcard * 透過排序操作:zrangebyscore <key> <min> <max> 集合裡的資料按照zscore排序。 ## **Zset資料結構示意圖:** ![](https://i.imgur.com/AdmCh2t.png) > ## Hash >**==一個key對應很多組key-value集合的概念==,可以想像成Key-HashMap,特別適合存物件(Key可當作物件名稱,value的HashMap則對應物件的屬性, 如圖示)** 基礎操作: * CRUD:HSET,HGET,HDEL * 多欄位讀:HGETALL,HKEYS,HMGET ## **Hash資料結構示意圖:** ![](https://i.imgur.com/krUYdvr.png) ## **基礎操作只單純提一些較代表性的指令,完整指令可透過[官網](https://redis.io/commands)學習。** ## Redis資料結構全圖 ![](https://i.imgur.com/nG3gl78.jpg) *Picture by https://www.gushiciku.cn/pl/giLN/zh-tw*