# Redis Overview
## Redis 是什麼 ?
Redis (Remote Dictionary Server) 是一個 open-source 的 in-memory 的資料儲存系統,分類上屬於 NoSQL。資料儲存在記憶體中所以速度可以很快,根據需求也可以支援寫入硬碟。不過最常用的功能是作為 cache。
## 建立一個 cloud Redis database
- 到[此網站](https://redis.com/try-free?utm_source=redisio&utm_medium=referral&utm_campaign=2023-09-try_free&utm_content=cu-redis_cloud_users&_ga=2.175050914.1856843813.1707386440-963761342.1707386440&_gl=1*1bd47hm*_ga*OTYzNzYxMzQyLjE3MDczODY0NDA.*_ga_8BKGRQKRPV*MTcwNzM4NjQzOS4xLjEuMTcwNzM4NzE0My41Ni4wLjA.*_gcl_au*MjAwMjA4OTkwNy4xNzA3Mzg2NDQw)去建立 free account
- 選一個 cloud provider 後就會自動幫你建立 Redis database 了
## 基本操作 (Python)
- 下載 Python 套件
```
pip install redis
```
- 連線到 cloud Redis server
- 先到[剛剛的連結](https://redis.com/try-free?utm_source=redisio&utm_medium=referral&utm_campaign=2023-09-try_free&utm_content=cu-redis_cloud_users&_ga=2.175050914.1856843813.1707386440-963761342.1707386440&_gl=1*1bd47hm*_ga*OTYzNzYxMzQyLjE3MDczODY0NDA.*_ga_8BKGRQKRPV*MTcwNzM4NjQzOS4xLjEuMTcwNzM4NzE0My41Ni4wLjA.*_gcl_au*MjAwMjA4OTkwNy4xNzA3Mzg2NDQw)點到你的 database 中的 Public Endpoint > Connect > 選擇 Python 後複製 code 連結
- Python 連線 (password 這邊可以到 database 的 Security 欄位中使用預設的)

```python
import redis
r = redis.Redis(host='***', port=***, password='*******', decode_responses=True)
```
這邊加 `decode_responses` 可以讓之後查找時回傳已經 decode 的值
- [Python API](https://redis-py.readthedocs.io/en/stable/commands.html)
- CRUD
Create: `set`, Read: `get`, Update: `set`, Delete: `delete`
```python
# create, read, and update
>>> r.set('name', 'bob')
True
>>> r.get('name')
'bob'
>>> r.set('name', 'alice')
True
>>> r.get('name')
'alice'
>>> r.keys()
['name']
# delete
>>> r.delete('name')
1 # 回傳刪除幾個 key
>>> r.keys()
[]
```
- `hset`, `hget`, `hdel`, ...
針對 hash 值的 key/value 做操作,以下例子可以把 `hash1` 當作一個 table
```python
>>> r.hset("hash1", "key1", "value1")
1
>>> r.hset("hash1", "key2", "value2")
1
>>> r.hkeys("hash1")
['key1', 'key2']
>>> r.hdel("hash1", "key1")
1
>>> r.hkeys("hash1")
['key2']
```