首頁  >  文章  >  後端開發  >  PHP實作Redis基本資料結構

PHP實作Redis基本資料結構

不言
不言原創
2018-07-04 17:42:421736瀏覽

這篇文章主要介紹了關於PHP實作Redis基本資料結構,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

Redis基本資料結構與PHP實作


  • Redis(REmote DIctionary Server)是一個開源的使用ANSI C語言編寫、遵守BSD協定、支援網路、可基於記憶體亦可持久化的日誌型、 Key-Value資料庫,並提供多種語言的API

  • Redis通常稱為資料結構伺服器,因為值(value)可以是字串(String),雜湊(Map ),列表(list),集合(Set),和有序集合(sorted sets)等類型

#Redis配置與連接

// Redis.php
return [
'host' => '127.0.0.1',
'port' => '6379'
];

// RedisTest.php
$redis = new redis();
$redisConf = include 'Redis.php';
$redis->connect($redisConf['host'], $redisConf['port']);

Redis鍵(Key)

// redis key操作
$redis->exists($key); // 判断key值是否存在
$redis->expire($key, 10); // 设置key在10秒后过期

Redis 字串(String)

// redis string 字符串
$redis->set($key, $val);
$redis->incr($key); // key值+1,除非val是整数,否则函数执行失败
$redis->decr($key); // key值-1,同上
$redis->append($key, "ue"); // 追加key值内容
$redis->strlen($key); // 返回key值的长度
// 当第一次设置key值后,key值的数据类型就不能改变了。
$redis->del($key); // 删除key值

Redis 哈希(Hash)

  • Redis Hash是一個string類型的field和value的映射表,hash特別適合用於儲存物件

  • #Redis中每個hash可以儲存2^(32)-1(40多億)個鍵值對

//redis hash 哈希
$redis->hset($key, 'field1', 'val1'); // 设置一个key-value键值对
$redis->hmset($key, array('field2'=>'val2', 'field3'=>'val3')); // 设置多个k-v键值对
$redis->hget($key, 'field2'); // 获取hash其中的一个键值
$redis->hmget($key, array('field2', 'field1')); // 获取hash的多个键值
$redis->hgetall($key); // 获取hash中所有的键值对
$redis->hlen($key); // 获取hash中键值对的个数
$redis->hkeys($key); // 获取hash中所有的键
$redis->hvals($key); // 获取hash中所有的值

Redis 列表(List)

  • Redis列表是簡單的字串列表,依照插入順序排序,可以新增一個元素清單的頭部(左邊)或尾部(右邊)

  • Redis中一個清單最多可以儲存2^( 32)-1個元素

// redis list 列表
$index = $start = 0;
$redis->lpush($key, 'val1', 'val2'); // 在list的开头添加多个值
$redis->lpop($key); // 移除并获取list的第一个元素
$redis->rpop($key); // 移除并获取list的最后一个元素 $stop = $redis->llen($key) - 1; // 获取list的长度
$redis->lindex($key, $index); // 通过索引获取list元素
$redis->lrange($key, $start, $stop); // 获取指定范围内的元素

Redis集合(Set)

  • Redis的Set是String類型的無序集合。集合成員是唯一的,這意味著集合中不能出現重複的資料

  • #Redis中集合是透過哈希表實現的,所以添加,刪除,查找的複雜度都是O(1)

  • Redis中的一個集合中最多儲存2^(32)-1個成員

// redis set 无序集合
$redis->sadd($key, 'val1', 'val2'); // 向集合中添加多个元素
$redis->scard($key); // 获取集合元素个数
$redis->spop($key); // 移除并获取集合内随机一个元素
$redis->srem($key, 'val1', 'val2'); // 移除集合的多个元素
$redis->sismember($key, 'val1'); // 判断元素是否存在于集合内

Redis有序集合(sorted set)

  • #Redis 有序集合和集合一樣也是string類型元素的集合,且不允許重複的成員

  • 不同的是每個元素都會關聯一個double類型的分數。 redis正是透過分數來為集合中的成員進行從小到大的排序

  • 有序集合的成員是唯一的,但分數(score)卻可以重複

  • 集合是透過哈希表實現的,所以添加,刪除,查找的複雜度都是O(1)。集合中最大的成員數為2^(32)-1

// redis sorted set 有序集合
// 有序集合里的元素都和一个分数score关联,就靠这个分数score对元素进行排序
$redis->zadd($key, $score1, $val1, $score2, $val2); // 向集合内添加多个元素
$redis->zcard($key); // 获取集合内元素总数
$redis->zcount($key, $minScore, $maxScore); // 获取集合内分类范围内的元素
$redis->zrem($key, $member1, $member2); // 移除集合内多个元素

Redis HyperLogLog

  • Redis HyperLogLog 是用來做基數統計(計算資料集中不重複元素的個數)的演算法,HyperLogLog 的優點是,在輸入元素的數量或體積非常非常大時,計算基數所需的空間總是固定的、而且是很小的

  • 在Redis 裡面,每個HyperLogLog 鍵只需要花費12 KB 內存,就可以計算接近2^(64)個不同元素的基數。這和計算基數時,元素越多耗費記憶體就越多的集合形成鮮明對比

  • #因為HyperLogLog只會根據輸入元素來計算基數,而不會儲存輸入元素本身,所以HyperLogLog不能像集合那樣,返回輸入的各個元素

$redis->pfAdd('key1', array('elem1', 'elem2'));// 添加指定元素到HyperLogLog中
$redis->pfAdd('key2', array('elem3', 'elem2'));// 将多个HyperLogLog合并为一个HyperLogLog
$redis->pfMerge('key3', array('key1', 'key2'));
$redis->pfCount('key3'); // 返回HyperLogLog的基数估计值: int(3)

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關推薦:

PHP中Define與Const的差異

PHP與Web頁面的互動

PHP中的ob_start用法解析

以上是PHP實作Redis基本資料結構的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn