---
# System prepended metadata

title: Redis

---

# 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 欄位中使用預設的)
    ![image](https://hackmd.io/_uploads/HkBigwvoa.png)

    
        ```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']
        ```
    