但有一些差異:
- Redis 可以將資料存至硬碟達到持久化 (RDB、AOF)
- Memcached 是多線程,Redis is a single-threaded server
- Redis 可儲存的資料結構比較多(strings, hashes, lists, sets, sorted sets,...)
- Redis 有 transaction 功能,但沒有 rollback。
兩者對於併發 race condition 中的 CAS(check-and-set),都有相對應的處理方法:Memcached::cas、Redis:transaction:WATCH
[安裝 Redis Server]
到 http://download.fedoraproject.org/pub/epel/ 找到最新的 EPEL repository
#新增 EPEL repo (使用 rpm 安裝) rpm -ivh http://download.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm #或是用 yum 指令安裝 yum install epel-release #查看安裝資訊 yum info epel-release #查看 redis 可用相關套件 yum list | grep redis #安裝 Redis Server yum install redis #設定開機啟動 systemctl enable redis #立即啟動 systemctl start redis #查看redis監聽的port(預設是6379) systemctl status redis ss -nlp | grep redis #查看防火牆是否有開啟 firewall-cmd --state #查看防火牆開放的 port firewall-cmd --list-all --zone=public #開放 6379 port firewall-cmd --permanent --zone=public --add-port=6379/tcp firewall-cmd --reload #效能測試 http://redis.io/topics/benchmarks redis-benchmark -q -n 100000 #查目前安裝的版本 redis-server --version
[Redis 設定檔]
/etc/redis.conf:普通單一的redis server設定檔,預設 port 是 6379
/etc/redis-sentinel.conf:管理多個redis,實現高可用性high availability功能,預設 port 是 26379 http://redis.readthedocs.org/en/latest/topic/sentinel.html
/etc/redis.conf 相關修改
#bind 設定 #0.0.0.0 全部都可連 #127.0.0.1 只能本機連 bind 127.0.0.1 #設定快取資料儲存到硬碟的頻率 #900秒內有1次更新 save 900 1 #300秒內有10次更新 save 300 10 #60秒內有10000次更新 save 60 10000 #AUTH 密碼設定 #http://redis.readthedocs.org/en/latest/connection/auth.html #若允許不信任的IP連線,可以設定密碼(官方建議設複雜一點,因為redis速度很快,可以在短時間被惡意測試很多密碼) requirepass 密碼
[Redis 指令]
#連線(預設 Server IP:127.0.0.1、Port:6379、無密碼) redis-cli #指定 Server IP、Port、密碼 連線 redis-cli -h 127.0.0.1 -p 6379 -a 密碼 #用telent連線(建議用redis-cli,redis-cli有指令自動完成提示) telnet 127.0.0.1 6379 #有設密碼時,若連線時沒填密碼,執行命令前須先用 auth 指令認證 127.0.0.1:6379> AUTH 密碼 OK #測試 127.0.0.1:6379> ping PONG #取得 server 全部設定值 127.0.0.1:6379> CONFIG GET * #設定String類型快取資料 127.0.0.1:6379> set k1 test OK #取得String類型快取資料 127.0.0.1:6379> get k1 "test" #get 只能取得 string 類型的資料 #若嘗試取得其他類型資料,會出現錯誤 #「(error) WRONGTYPE Operation against a key holding the wrong kind of value」 #string 類型資料使用:get <key> #hash 類型資料使用(單一):hget <key> <field> #hash 類型資料使用(全部):hgetall <key> #list 類型資料使用:LRANGE <key> <start> <stop> # 例如:lrange testkey 0 -1 #set 類型資料使用:smembers <key> #zset 類型資料使用:ZRANGE <key> <start> <stop> [WITHSCORES] # 例如:zrange testkey 0 -1 withscores #查詢某個 key 內儲存的資料類型 127.0.0.1:6379> type k1 string #取得所有key 127.0.0.1:6379> keys * #取得PHP開頭的key 127.0.0.1:6379> keys PHP* 1) "PHPREDIS_SESSION:n47g4vh1qt2pltplkd3lhifes2" 2) "PHPREDIS_SESSION:qp2fj1dpff0rgt6lakno4nrlh1" #查看伺服器資訊 127.0.0.1:6379> info #切換到1號DB (編號從0開始,預設為0) 127.0.0.1:6379> select 1 OK 127.0.0.1:6379[1]> #刪除 key 為 k1 的資料 1127.0.0.1:6379> del k1 (integer) 1 #清空目前DB所有資料 127.0.0.1:6379> flushdb OK #清空全部DB的資料 127.0.0.1:6379> flushall OK #查詢資料剩多久過期 #-1表示沒設定過期時間 #-2表示key不存在 127.0.0.1:6379> TTL k1 (integer) -1 127.0.0.1:6379> TTL ktest (integer) -2 #設定資料多久後過期(毫秒),例如設定 k1 在 8 秒後過期 #成功返回1,失敗或key不存在返回0 127.0.0.1:6379> pexpire k1 8000 (integer) 1 #列出目前 client 端的連線 127.0.0.1:6379> CLIENT LIST #觀察 Redis instance 接收到執行的指令 $ redis-cli monitor 或 $ redis-cli -h 127.0.0.1 -p 6379 -a 密碼 monitor ***** 查詢執行慢的log(slowlog) ***** ***** slowlog 儲存在系統記憶體中 ***** #取得目前執行時間超過多久,屬於 slowlog,單位 µs (1ms=1000µs) 127.0.0.1:6379> CONFIG GET slowlog-log-slower-than 1) "slowlog-log-slower-than" 2) "10000" #設定超過多少 µs,屬於 slowlog 127.0.0.1:6379> CONFIG SET slowlog-log-slower-than 數字 #查詢最多保存幾筆 slowlog 127.0.0.1:6379> CONFIG GET slowlog-max-len 1) "slowlog-max-len" 2) "128" #設定最多保存幾筆 slowlog 127.0.0.1:6379> CONFIG SET slowlog-max-len 數字 #查詢 slowlog 127.0.0.1:6379> slowlog get 數量(設為-1則全部列出) #目前 slowlog 數量 127.0.0.1:6379> SLOWLOG LEN #重置 slowlog 127.0.0.1:6379> SLOWLOG RESET ***********************************
[安裝 php-pecl-redis(phpredis)] PHP Redis extension
#安裝,安裝後重新啟動 #https://pecl.php.net/package/redis #https://github.com/phpredis/phpredis#readme yum install php-pecl-redis
[PHP 連接 Redis 簡單範例]
$redis = new Redis(); $redis->connect('127.0.0.1', 6379); $redis->auth('密碼'); //如果有設定 requirepass $redis->set('aa', 'abcd'); echo $redis->get('aa');
參考:
- https://www.awaimai.com/1324.html
Redis常用命令 - 歪麦博客 - http://www.runoob.com/redis/redis-commands.html
Redis 命令 | 菜鸟教程 - http://www.runoob.com/redis/redis-data-types.html
Redis 数据类型 | 菜鸟教程 - http://www.runoob.com/redis/redis-conf.html
Redis 配置 | 菜鸟教程 - https://redis.io/topics/rediscli
redis-cli, the Redis command line interface – Redis - https://redis.io/commands/slowlog
SLOWLOG – Redis
其他資料:
- http://redisdoc.com/
Redis 命令参考 - http://redisbook.readthedocs.org/en/latest/index.html
Redis 设计与实现(第一版) - http://redisbook.com/index.html
Redis 设计与实现 - http://www.runoob.com/redis/redis-tutorial.html
Redis 教程 - https://stackoverflow.com/questions/8078018/get-redis-keys-and-values-at-command-prompt
Get Redis keys and values at command prompt - Stack Overflow
沒有留言:
張貼留言