Redis(REmote DIctionary Server)是一個(gè)開源的使用ANSI C語(yǔ)言編寫、遵守BSD協(xié)議、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的API
Redis通常被稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器,因?yàn)橹?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); // 設(shè)置key在10秒后過期Redis 字符串(String)
// redis string 字符串$redis- set($key, $val);$redis- incr($key); // key值+1,除非val是整數(shù),否則函數(shù)執(zhí)行失敗$redis- decr($key); // key值-1,同上$redis- append($key, ue // 追加key值內(nèi)容$redis- strlen($key); // 返回key值的長(zhǎng)度// 當(dāng)?shù)谝淮卧O(shè)置key值后,key值的數(shù)據(jù)類型就不能改變了。$redis- del($key); // 刪除key值Redis 哈希(Hash)
Redis Hash是一個(gè)string類型的field和value的映射表,hash特別適合用于存儲(chǔ)對(duì)象
Redis中每個(gè)hash可以存儲(chǔ)2^(32)-1(40多億)個(gè)鍵值對(duì)
//redis hash 哈希$redis- hset($key, field1 , val1 // 設(shè)置一個(gè)key-value鍵值對(duì)$redis- hmset($key, array( field2 = val2 , field3 = val3 // 設(shè)置多個(gè)k-v鍵值對(duì)$redis- hget($key, field2 // 獲取hash其中的一個(gè)鍵值$redis- hmget($key, array( field2 , field1 // 獲取hash的多個(gè)鍵值$redis- hgetall($key); // 獲取hash中所有的鍵值對(duì)$redis- hlen($key); // 獲取hash中鍵值對(duì)的個(gè)數(shù)$redis- hkeys($key); // 獲取hash中所有的鍵$redis- hvals($key); // 獲取hash中所有的值Redis 列表(List)
Redis列表是簡(jiǎn)單的字符串列表,按照插入順序排序,可以添加一個(gè)元素列表的頭部(左邊)或者尾部(右邊)
Redis中一個(gè)列表最多可以存儲(chǔ)2^(32)-1個(gè)元素
// redis list 列表$index = $start = 0;$redis- lpush($key, val1 , val2 // 在list的開頭添加多個(gè)值$redis- lpop($key); // 移除并獲取list的第一個(gè)元素$redis- rpop($key); // 移除并獲取list的最后一個(gè)元素 $stop = $redis- llen($key) - 1; // 獲取list的長(zhǎng)度$redis- lindex($key, $index); // 通過索引獲取list元素$redis- lrange($key, $start, $stop); // 獲取指定范圍內(nèi)的元素Redis集合(Set)
Redis的Set是String類型的無序集合。集合成員是唯一的,這就意味著集合中不能出現(xiàn)重復(fù)的數(shù)據(jù)
Redis中集合是通過哈希表實(shí)現(xiàn)的,所以添加,刪除,查找的復(fù)雜度都是O(1)
Redis中的一個(gè)集合中最多存儲(chǔ)2^(32)-1個(gè)成員
// redis set 無序集合$redis- sadd($key, val1 , val2 // 向集合中添加多個(gè)元素$redis- scard($key); // 獲取集合元素個(gè)數(shù)$redis- spop($key); // 移除并獲取集合內(nèi)隨機(jī)一個(gè)元素$redis- srem($key, val1 , val2 // 移除集合的多個(gè)元素$redis- sismember($key, val1 // 判斷元素是否存在于集合內(nèi)Redis有序集合(sorted set)
Redis 有序集合和集合一樣也是string類型元素的集合,且不允許重復(fù)的成員
不同的是每個(gè)元素都會(huì)關(guān)聯(lián)一個(gè)double類型的分?jǐn)?shù)。redis正是通過分?jǐn)?shù)來為集合中的成員進(jìn)行從小到大的排序
有序集合的成員是唯一的,但分?jǐn)?shù)(score)卻可以重復(fù)
集合是通過哈希表實(shí)現(xiàn)的,所以添加,刪除,查找的復(fù)雜度都是O(1)。 集合中最大的成員數(shù)為2^(32)-1
// redis sorted set 有序集合// 有序集合里的元素都和一個(gè)分?jǐn)?shù)score關(guān)聯(lián),就靠這個(gè)分?jǐn)?shù)score對(duì)元素進(jìn)行排序$redis- zadd($key, $score1, $val1, $score2, $val2); // 向集合內(nèi)添加多個(gè)元素$redis- zcard($key); // 獲取集合內(nèi)元素總數(shù)$redis- zcount($key, $minScore, $maxScore); // 獲取集合內(nèi)分類范圍內(nèi)的元素$redis- zrem($key, $member1, $member2); // 移除集合內(nèi)多個(gè)元素Redis HyperLogLog
Redis HyperLogLog 是用來做基數(shù)統(tǒng)計(jì)(計(jì)算數(shù)據(jù)集中不重復(fù)元素的個(gè)數(shù))的算法,HyperLogLog 的優(yōu)點(diǎn)是,在輸入元素的數(shù)量或者體積非常非常大時(shí),計(jì)算基數(shù)所需的空間總是固定 的、并且是很小的
在 Redis 里面,每個(gè) HyperLogLog 鍵只需要花費(fèi) 12 KB 內(nèi)存,就可以計(jì)算接近 2^(64)個(gè)不同元素的基 數(shù)。這和計(jì)算基數(shù)時(shí),元素越多耗費(fèi)內(nèi)存就越多的集合形成鮮明對(duì)比
因?yàn)?HyperLogLog只會(huì)根據(jù)輸入元素來計(jì)算基數(shù),而不會(huì)儲(chǔ)存輸入元素本身,所以 HyperLogLog不能像集合那樣,返回輸入的各個(gè)元素
$redis- pfAdd( key1 , array( elem1 , elem2 // 添加指定元素到HyperLogLog中$redis- pfAdd( key2 , array( elem3 , elem2 // 將多個(gè)HyperLogLog合并為一個(gè)HyperLogLog$redis- pfMerge( key3 , array( key1 , key2 $redis- pfCount( key3 // 返回HyperLogLog的基數(shù)估計(jì)值: int(3)鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選