Redis(REmote DIctionary Server)是一個開源的使用ANSI C語言編寫、遵守BSD協議、支持網絡、可基于內存亦可持久化的日志型、Key-Value數據庫,并提供多種語言的API
Redis通常被稱為數據結構服務器,因為值(html' target='_blank'>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[ portRedis鍵(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)鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答