常用得PHP操作redis

常用得PHP操作redis

驗證是否安裝OK:打開終端->輸入redis-server, 在打開一個終端–>輸入redis-cli 顯示:127.0.0.1:6379>則成功!

連接redis

//連接redis
$redis = new redis();
$redis->connect('127.0.0.1', '6379') || die("連接失敗!");
$redis->auth("admin"); //授權

常規操作

$redis->flushall();die;//清空所有數據庫
$redis->flushdb();die;//清空當前數據庫
$redis->keys("*");   //返回所有key
$redis->keys("*t");   //返回所有s開頭的key
$res = $redis->keys("*");
    foreach ($res as $k => $v) {
        echo $v."=>".$redis->get($v)."<br>";
}
$redis->select("1");// 選擇數據庫
$redis->move("get",1);// 把key移到另一個數據庫
$redis->randomkey();//隨機返回一個key
$redis->rename("names","newname");//重命名key
$redis->type("zset");//獲取key類型
$redis->dbsize();//獲取數據庫key個數
$redis->info();//獲取redis服務信息
$redis->echo("hello,world");//輸出函數

string類型

String 是最簡單的key/value類型,String類型是二進制安全的。Redis的String可以包含任何數據,比如jpg圖片或者序列化的對象

$redis->set('test', 200); //賦值 
$redis->expire("set2",100);   //設置key 過期時間10s
$redis->persist("set2");// 移除過期時間
$redis->mset(array('key0' => 'value0', 'key1' => 'value1'));//批量賦值
$redis->mget(array('key0', 'key1', 'key2'));//批量獲取值  
$redis->setnx('key',value);//設置key對應的值爲string類型的value,如果key已經存在,返回0,nx是not exist的意思
$redis->msetnx(array('key0' => 'value0', 'key1' => 'value1'));//全部成功返回1,否則失敗一個也返回0
$redis->getset("key",'newvalue');//getset設置key的值,並返回key的舊值
$redis->setex('key',10,'value10');//帶生存時間的寫入值單位s
$redis->setrange('key',0,'hello');//設置子字符串替換,key,開始位置,替換值
$redis->getrange("key",0,2);//getrange獲取子字符串,getrange key start end 
$redis->ttl('key');//獲取key的生存時間,沒設置的爲-1
$redis->keys("*a*");//獲取所有key,也可獲取具體key,模糊匹配key
$redis->get("test"); //根據key獲取value
$redis->getMultiple(array('key1', 'key2', 'key3'));
$exits = $redis->exists('test'); //判斷key是否存在。存在 true 不存在 false
echo $exists?$res2:"null";
echo $res1?$res2:"null";die; 
$redis->delete('key1', 'key2'); //刪除,可刪除多個
$redis->delete(array('key3', 'key4', 'key5'));//刪除,可刪除多個
$redis->delete( $redis->keys("*"));//傳數組,刪除所有key
$redis->incr("key",1);//自增,默認值1 
$redis->incrBy('key',10);//必須給定參數值
$redis->decr("key",10);//自減,默認值1 
$redis->decrBy('key',10);//必須給定參數值
$redis->append("key","appendvalue");//給指定的key的字符串追加value,返回新字符串的長度
$redis->strlen('key');//獲取指定key的字符串長度

hash類型

Redis hash是一個string類型的field和value的映射表。它的添加刪除都是0(1)
hash特別適合用於存儲對象。相對於將對象的每個字段存成單個string類型。
將一個對象存儲在hash類型中會佔用更少的內存,並且可以更方便的存取整個對象。

$redis->hset("test","username","admin");//單個設置
$redis->hget("test","username");//單個獲取
$redis->hsetnx("test","username","[email protected]");//設置hash field 爲指定的值value,如果feild已經存在,返回0,nx是not exist的意思  
$redis->hmset("testabc",array("a"=>1,"b"=>2,"c"=>3,'d'=>4));//批量設置
$redis->hmget("testabc",array("a","b","c"));//批量獲取
$redis->hincrBy("test","password","123456");//設置hash field 添加key和value
$redis->hexists("test","usernames");//測試hash field  存在1,不存在0
$redis->hlen("test"); //返回hash 裏所有的 field 的數量
$redis->hdel("test","key");//刪除指定hash的field
$redis->hkeys("test"); //返回hash 所有 field
$redis->hvals("test");//返回hash 所有 field values
$redis->hgetall("test");//獲取hash中全部的field和value

list鏈表

棧先進後出;隊列先進先出;
List 是一個鏈表結構,主要功能是push,pop,獲取一個範圍的所有值等等,操作中key理解爲鏈表的名字。
Redis的list類型其實就是一個每個子元素都是string類型的雙向鏈表。我們可以通過push,pop操作從鏈表的頭部或者尾部添加刪除元素,這樣LIST既可以作爲棧,又可以作爲隊列。

$redis->lrange("list",0,-1);//取鏈表list 從0位開始取到最後位置;0代表頭  -1代表尾
$redis->lpush("list","1"); //在key對應的list的頭部添加字符串元素
$redis->rpush("list","test"); //在key對應的list的尾部添加字符串元素
$redis->lpop("list");//在key對應的list的頭部刪除字符串元素,並返回刪除字符
$redis->rpop("list");//在key對應的list的尾部刪除字符串元素,並返回刪除字符
echo  $redis->lrem("list",2,'key');//在list中刪除N個和value相同的元素(n<0從尾刪除,n=0全部刪除),返回的值爲刪除的個數
$redis->lset("list",-1,"啊");//設置list中指定下標的元素值 lset(list,位置,值),位置可以從頭或者從尾
$redis->lindex("list",0);//返回list中index位置的元素
$redis->llen("list");//返回list的長度
$redis->ltrim("list",0,1);//保留指定key的值的範圍內的數據 0爲頭  -1爲尾  
$redis->linsert("list");//********
$redis->rpoplpush("list","listt");//從第一個LIST的尾部移除元素並添加到第二個LIST的頭部

set集合

Set是集合,它是string類型的無序集合。set是通過hash table實現的,添加,刪除和查找的複雜程度都是0(1)
對集合我們可以取並集,交集,差集。通過這些操作我們可以實現SNS中的好友推薦和blog的tag功能

$redis->smembers("col");//集合元素列表
$redis->srem("col",'d');//集合移除元素
$redis->spop("col");//隨機刪除集合元素並返回刪除的元素。刪除最後一個元素時,則集合也被刪除
$redis->sdiff("set1","set2");//取多個集合的差集,誰在前面已誰爲標準(差集就是前面第一個集合有而後面所有集合都沒有)
$redis->sdiffstore("dif","set1","set2");//返回多個集合的差集,存在第三個集合裏面
$redis->sinter("set","set1",'set2');//交集(所有集合都有的元素)
$res = $redis->sinterstore("inter","set","set1");///取多個集合的交集,存在第三個集合裏面
$redis->sunion("set","set1",'set2');//並集(所有集合合併去重的元素)
$redis->sunionstore("union","set","set1");///取多個集合的並集,存在第三個集合裏面
$redis->smove("set1","set2","value");///第一個集合元素剪切到第二個集合裏面。
$redis->scard("set");//返回集合中元素的個數
$redis->sismember("set","value");//判斷某個元素是否爲集合的元素
$redis->srandmember("set");//隨機返回集合內的一個元素,不會刪除元素      
$redis->exists("set");   //判斷該key是否存在
$redis->del("inter");   //刪除該key    
$redis->keys("*");   //返回所有key
$redis->keys("*t");   //返回所有s開頭的key
$res = $redis->keys("*");
    foreach ($res as $k => $v) {
        echo $v."=>".$redis->get($v)."<br>";
}
$redis->exists("set");   //判斷該key是否存在
$redis->del("inter");   //刪除該key 
$redis->expire("set2",100);   //設置key 過期時間10s
$redis->ttl("set3");//查看過期剩餘時間s

$redis->select("1");// 選擇數據庫
$redis->set("name","test");// 設置key=>value
$redis->get("name");// 根據key獲取value
$redis->move("get",1);// 把key移到另一個數據庫
$redis->persist("set2");// 移除過期時間
$redis->randomkey();//隨機返回一個key
$redis->rename("names","newname");//重命名key
$redis->type("zset");//獲取key類型
$redis->dbsize();//獲取數據庫key個數
$redis->info();//獲取redis服務信息
$redis->echo("hello,world");//輸出函數

簡單得實例

string來存儲用戶的最大id,用來id的自增
hash 表來存儲用戶的詳細信息
list鏈表結構來存儲用戶的id號

$uid = $redis->incr("blog:id");  //自增長
$res = $redis->hmset('blog:user:' . $uid, array('id' => $uid, 'username' => 'admin'.time() . time(), 'password' => md5(time()))); //hash表插入一條記錄
$redis->rpush("blog:uid", $uid);
$res = $redis->hgetall("blog:user:".$uid);
$redis->del("blog:user:".$uid);//刪除用戶
$redis->lrem("blog:uid",$uid);//刪除鏈表中的id
print_r($res);die;


$count = $redis->lsize("blog:uid"); //list類型count總數 
$page_size = 3;
$page_num = !empty($_GET['page']) ? $_GET['page'] : 1;
$page_count = ceil($count / $page_size);
$ids = $redis->lrange("blog:uid", ($page_num - 1) * $page_size, (($page_num - 1) * $page_size + $page_size - 1));
foreach ($ids as $v) {
	$ress[] = $redis->hgetall("blog:user:" . $v); //獲取記錄  
}
echo"<pre>";
print_r($ress);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章