# Redis學習散記 <!--**2024/7/2 : 加上一些額外的學習心得**--> ## Redis的五種資料型態 ### 1. Key: 使用起來原則跟memcached相同,key-value架構 適用design pattern: * 緩存模式 (Caching Pattern):存儲簡單的鍵值對數據。 * 計數器模式 (Counter Pattern):使用INCR和DECR命令實現高效的計數器。 * 分佈式鎖 (Distributed Lock):使用SETNX命令實現簡單的分佈式鎖。 ***example:*** ``` redis 127.0.0.1:6379> SET runoobkey redis OK redis 127.0.0.1:6379> DEL runoobkey (integer) 1 ``` ### 2. List: 相同使用key值,但可以如同陣列一樣順序性的放東西進去 > 一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。 適用design pattern: * 生產者-消費者模式 (Producer-Consumer Pattern):實現消息隊列。 * 發布-訂閱模式 (Publish-Subscribe Pattern):實現一個簡單的消息發布系統。 * 最新N個項目模式 (Latest N Items Pattern):保存最新的N條數據,如最新評論。 ***example:*** ``` redis 127.0.0.1:6379> LPUSH runoobkey redis (integer) 1 redis 127.0.0.1:6379> LPUSH runoobkey mongodb (integer) 2 redis 127.0.0.1:6379> LPUSH runoobkey mysql (integer) 3 redis 127.0.0.1:6379> LRANGE runoobkey 0 10 1) "mysql" 2) "mongodb" 3) "redis" ``` ### 3.Set: 有點像是List,但是插入的字串,是沒有順序性的,且成員是唯一的,不可以出現重複 > 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。 適用design pattern: * 標籤系統 (Tagging System):管理和查詢標籤。 * 唯一訪客統計 (Unique Visitor Tracking):記錄唯一訪客。 * 黑名單/白名單模式 (Blacklist/Whitelist Pattern):管理特定的用戶群。 * 社交圖譜 (Social Graph):管理用戶關係,如好友、粉絲等。 ***example:*** ``` redis 127.0.0.1:6379> SADD runoobkey redis (integer) 1 redis 127.0.0.1:6379> SADD runoobkey mongodb (integer) 1 redis 127.0.0.1:6379> SADD runoobkey mysql (integer) 1 redis 127.0.0.1:6379> SADD runoobkey mysql (integer) 0 redis 127.0.0.1:6379> SMEMBERS runoobkey 1) "mysql" 2) "mongodb" 3) "redis" ``` ### 4.Sorted Set: 顧名思義跟Set有同樣的特性,差別是每個內容都有一個double型態的分數,用來作為排序 適用design pattern: * 排行榜模式 (Leaderboard Pattern):實現高效的排名系統。 * 優先級隊列模式 (Priority Queue Pattern):根據優先級處理任務。 * 延遲隊列模式 (Delayed Queue Pattern):實現定時任務或延遲執行。 * 地理位置索引 (Geospatial Indexing):存儲和查詢地理位置信息。 ***example:*** ``` redis 127.0.0.1:6379> ZADD runoobkey 1 redis (integer) 1 redis 127.0.0.1:6379> ZADD runoobkey 2 mongodb (integer) 1 redis 127.0.0.1:6379> ZADD runoobkey 3 mysql (integer) 1 redis 127.0.0.1:6379> ZADD runoobkey 3 mysql (integer) 0 redis 127.0.0.1:6379> ZADD runoobkey 4 mysql (integer) 0 redis 127.0.0.1:6379> ZRANGE runoobkey 0 10 WITHSCORES 1) "redis" 2) "1" 3) "mongodb" 4) "2" 5) "mysql" 6) "4" ``` ### 5.Hash 類似python中的dictionary或javascript的object的資料結構,用來存特定對象的多樣屬性,看example可以理解 (假設我們有一個用戶信息的 hash) > Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。 適用design pattern: * 對象緩存模式 (Object Caching Pattern):緩存複雜對象,如用戶信息。 * 短URL系統 (URL Shortener):存儲URL映射。 * 會話存儲 (Session Storage):管理用戶會話數據。 * 配置管理 (Configuration Management):存儲和管理應用配置。 ***example:*** ``` HSET user:1001 name "Alice" HSET user:1001 age 30 HSET user:1001 email "alice@example.com" HGET user:1001 name # 返回 "Alice" HGET user:1001 age # 返回 "30" HGETALL user:1001 # 返回所有鍵值對 ``` <!-- --- 連上 redis-cli -h {URL of AWS elastic cache}} -p 6379 這裡有一些跟Redis列表(list)相關的指令: - 確認list裡面目前有多少數量的工作 LLEN key - 直接幹掉整個Key DEL key --- # supervisor的安裝/使用/貓逆 下指令supervisord或 service supervisor start如果出現如下 ``` Starting supervisor: Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord. For help, use /usr/bin/supervisord -h ``` 則使用 `sudo unlink /var/run/supervisor.sock` 可以參考這裡的說明 https://stackoverflow.com/questions/25121838/supervisor-on-debian-wheezy-another-program-is-already-listening-on-a-port-that 在ubuntu 上面的安裝步驟for php 7.4 sudo apt-get update sudo apt-get install -y php7.4-redis sudo phpenmod -v 7.4 redis sudo systemctl restart apache2 # 如果使用 Apache sudo systemctl restart php7.4-fpm # 如果使用 PHP-FPM -->