# 技術|系統設計 Redis - https://redis.io/docs/latest/develop/get-started/ ## Redis 的基本用法 - 使用 docker 架設 redis ```bash= docker pull redis docker run --name redis-server -p 6379:6379 -d redis ``` - 使用 python API 和 redis 互動 ```bash= pip3 install redis ``` ```python= import redis def main(): # Redis default port is 6379 # Redis default supports 16 databases client = redis.Redis(host='localhost', port=6379, db=0) client.set('foo', 'bar') value = client.get('foo') if value is None: print('The key "foo" does not exist') else: print(f'The value of "foo" is: {value.decode("utf-8")}') if __name__ == '__main__': main() ``` - Redis 原生支持多種資料結構 - String - 用途:最基本的資料類型,用於存儲簡單的鍵值對 - 操作:SET、GET、INCR、DECR、MGET、APPEND - Lists - 用途:儲存多個有序的字串元素,支持從兩端操作列表元素 - 操作:LPUSH、RPUSH、LPOP、RPOP、LRANGE - Sets - 用途:存儲不重複的無序元素集合 - 操作:SADD、SREM、SMEMBERS、SINTER、SUNION、SDIFF - Sorted Sets - 用途:類似於集合,但每個元素關聯一個分數,集合中的元素根據分數排序 - 操作:ZADD、ZRANGE、ZREM、ZINCRBY、ZRANGEBYSCORE - Hashes - 用途:存儲鍵-值對的集合,類似於 Python 的字典(dict)。 - 操作:HSET、HGET、HGETALL、HMSET、HDEL - Bitmaps - 用途:用位操作來處理字符串,適合狀態標記、計數統計等需求 - 操作:SETBIT、GETBIT、BITCOUNT、BITOP ## 在系統設計中, Redis 常見的功用 1. 快取(Cache) 2. 分散式鎖(Distributed Lock): 3. 消息隊列(Message Queue):Redis 的 List 結構可以作為簡單的消息隊列 4. 排行榜(Leaderboards):Redis 的 Sorted Set 結構非常適合實現排行榜 5. Session 管理:TTL 功能提供高效、持久化的 session 管理 ## Redis 的高性能 1. Redis 將數據存在 memory 中,速度遠快於磁碟 I/O 操作 2. Redis 使用單線程事件循環模型,減少上下文切換的開銷 - 雖然是單線程,但 Redis 能夠通過非阻塞的 I/O 操作來處理多個客戶端請求 3. Redis 提供高效的資料結構(如字符串、列表、集合、哈希等)都是針對性能優化的 4. Redis 的操作指令(SET、GET)設計簡單明瞭,大多數操作都只需一次網路請求,減少延遲 5. Redis 提供多種持久化機制,如 RDB(快照)和 AOF(追加檔案) 6. Redis 支援管道(Pipeline)操作,允許客戶端一次性發送多個命令 7. Redis 使用簡單的通訊協議(RESP),可以有效地處理大量的請求 8. Redis 在內部使用的資料結構針對常見的操作進行了優化 9. Redis 支援分片和集群模式,多個 Redis 節點可以協同工作,以處理更高的請求量。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up