PHP實現Redis基本資料結構

來源:互聯網
上載者:User
這篇文章主要介紹了關於PHP實現Redis基本資料結構,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

Redis基本資料結構與PHP實現

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

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

Redis配置與串連

// Redis.phpreturn ['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)

以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.