---
# System prepended metadata

title: Redis

---

# 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*








