redis安裝使用

Redis是一個開源的使用ANSI C語言編寫、遵照BSD協議、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。php

它一般被稱爲數據結構服務器,由於值(value)能夠是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等類型。html

Redis 與其餘 key - value 緩存產品有如下三個特色:redis

  • Redis支持數據的持久化,能夠將內存中的數據保存在磁盤中,重啓的時候能夠再次加載進行使用。
  • Redis不單單支持簡單的key-value類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。
  • Redis支持數據的備份,即master-slave模式的數據備份。
  • 性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
  • 豐富的數據類型 – Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數據類型操做。
  • 原子 – Redis的全部操做都是原子性的,意思就是要麼成功執行要麼失敗徹底不執行。單個操做是原子性的。多個操做也支持事務,即原子性,經過MULTI和EXEC指令包起來。
  • 豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過時等等特性。

OS: ubuntu18.04數據庫

Language: php7json

 

安裝redis:ubuntu

sudo apt-get install redis-server

查看 redis進程:緩存

ps -aux|grep redis
redis    10461  0.1  0.0  58552  3728 ?        Ssl  10:06   0:00 /usr/bin/redis-server 127.0.0.1:6379
nuuuu   10569  0.0  0.0  21536  1036 pts/3    S+   10:06   0:00 grep --color=auto redis

設置redis的訪問密碼安全

 安裝後配置文件路徑: /etc/redis/redis.conf服務器

修改 redis.conf, 去掉requirepass password 的#網絡

requirepass 12345678

修改配置重啓redis服務:

sudo service redis-server restart

 

訪問時使用auth:

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('12345678');

 

 

安裝php-redis擴展:

sudo pecl install redis

報錯:

checking use system liblzf... no
checking for igbinary includes... configure: error: Cannot find igbinary.h
ERROR: `/tmp/pear/temp/redis/configure --with-php-config=/usr/local/php/bin/php-config --enable-redis-igbinary=y --enable-redis-lzf=y' failed

此處是由於沒有安裝 igbinary 一個序列號與反序列化的php擴展

安裝 igbinary 擴展

sudo pecl install igbinary

再執行

sudo pecl install redis

重啓php-fpm: 查看php-info

 redis 設置key

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('a','aaa');

redis 讀取key->value

$a= $redis->get('a');
print_r($a);

redis 設置集合

$redis->sAdd('fd',1);
$redis->sAdd('fd',2);
$redis->sAdd('fd','333');

redis讀取集合

foreach ($redis->sMembers('fd') as  $value) {
    print_r($value);
}

 redis 設置list列表

$arr = array('h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd');
foreach ($arr as $v) {
    $redis->rpush("mylist", $v);
}

redis 獲取list列表

$value = $redis->lpop('mylist');
print_r($value);

 

redis 的實時消息訂閱

 # 發佈消息文件
$message= json_encode(['run=12','did=10001']);
$ret=$redis->publish('worker_channel',$message);
$ret=$redis->publish('worker_channel',"send_msg.hahaha");

訂閱消息 文件

$result = $redis->subscribe(["worker_channel"], 'callback');
function callback($redis, $channel, $message) {
    if ($channel == 'w1') {
        echo '頻道1';
    } else {
        echo $message;
    }
}

 但當訂閱的文件執行60s後會報錯:

PHP Fatal error:  Uncaught RedisException: read error on connection in ***
Stack trace:
#0 ****: Redis->subscribe(Array, 'callback')

這是由於訂閱默認60s超時就退出鏈接。解決辦法:

設置-1 永不超時

$redis->setOption(Redis::OPT_READ_TIMEOUT, -1);

 

 

 

 

Redis與Memcached的區別

引用:http://www.cnblogs.com/wangkai1990/p/5212404.html

一、Redis和Memcache都是將數據存放在內存中,都是內存數據庫。不過memcache還可用於緩存其餘東西,例如圖片、視頻等等;

二、Redis不單單支持簡單的k/v類型的數據,同時還提供list,set,hash等數據結構的存儲;

三、虛擬內存--Redis當物理內存用完時,能夠將一些好久沒用到的value 交換到磁盤;

四、過時策略--memcache在set時就指定,例如set key1 0 0 8,即永不過時。Redis能夠經過例如expire 設定,例如expire name 10;

五、分佈式--設定memcache集羣,利用magent作一主多從;redis能夠作一主多從。均可以一主一從;

六、存儲數據安全--memcache掛掉後,數據沒了;redis能夠按期保存到磁盤(持久化);

七、災難恢復--memcache掛掉後,數據不可恢復; redis數據丟失後能夠經過aof恢復;

八、Redis支持數據的備份,即master-slave模式的數據備份;

相關文章
相關標籤/搜索