但有一些差異:
- 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 指令]
#本機連線 redis-cli #指定 port、IP 連線 redis-cli -p 6379 -h 127.0.0.1 #用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" #取得所有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
[安裝 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');
參考:
Redis常用命令 - 歪麦博客
Redis 命令 | 菜鸟教程
Redis 数据类型 | 菜鸟教程
Redis 配置 | 菜鸟教程
其他資料:
Redis 命令参考
Redis 设计与实现(第一版)
Redis 设计与实现
Redis 教程
沒有留言:
張貼留言