2015年9月16日 星期三

CentOS 7 安裝 Redis、php-pecl-redis(phpredis)

Redis 是一種 NoSQL 記憶體式的資料庫(key-value),跟 Memcached 很像。
但有一些差異:
  • 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::casRedis:transaction:WATCH

[安裝 Redis Server]
到 http://download.fedoraproject.org/pub/epel/ 找到最新的 EPEL repository
#新增 EPEL repo
rpm -ivh  http://download.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
#查看 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

#本機連線
redis-cli

#效能測試 http://redis.io/topics/benchmarks
redis-benchmark -q -n 100000

[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 設定,bind 127.0.0.1 只能本機連
#改為全部都可連
bind 0.0.0.0

#查看防火牆是否有開啟
firewall-cmd --state

#查看防火牆開放的 port
firewall-cmd --list-all --zone=public

#開放 6379 port
firewall-cmd --permanent --zone=public --add-port=6379/tcp
firewall-cmd --reload

#AUTH 設定
#http://redis.readthedocs.org/en/latest/connection/auth.html
#若允許不信任的IP連線,可以設定密碼(官方建議設複雜一點,因為redis速度很快,可以在短時間被惡意測試很多密碼)
requirepass mypass

#重新啟動
systemctl restart redis

#連線
telnet 127.0.0.1 6379

#有設密碼時,須先用 auth 指令認證
auth mypass
+OK


[安裝 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('mypass'); //如果有設定 requirepass
$redis->set('aa', 'abcd');
echo $redis->get('aa');


其他資料:
Redis 命令参考
Redis 设计与实现(第一版)
Redis 设计与实现
Redis 教程

沒有留言:

張貼留言