一、前言
Redis是一個開源的使用ANSI C語言編寫、遵守BSD協定、支援網絡、可基于記憶體亦可持久化的日志型、key-Value 的資料庫、并提供多種語言的API。
通常,Redis 将資料存儲于記憶體中,或被配置為使用虛拟記憶體。通過兩種方式可以實作資料持久化:使用截圖的方式,将記憶體中的資料不斷寫入磁盤;或使用類似 MySQL 的日志方式,記錄每次更新的日志。前者性能較高,但是可能會引起一定程度的資料丢失;後者相反。
解釋了為什麼選用6379作為預設端口,因為6379在手機按鍵上MERZ對應的号碼,而MERZ取自意大利歌女Alessia Merz的名字。
二、特點
- 支援資料的持久化,可以将記憶體中的資料儲存到磁盤中,重新開機的時候可以再次加載進行使用。
- 豐富的資料類型存儲:String、list、set、zset、hash。
- 支援資料的備份,即master-slave模式的資料的備份。
- 性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s。
- 所有的操作都是基于原子性的。
三、資料對象
- String
--redis的String可以包含任何資料,比如jpg圖檔或者序列後的對象,一個key最大能存儲512MB。
- Hash
--hash 是一個String類型的field 和 value 的映射表,hash 特别适合用于存儲對象。每個hash可以存儲2^32-1鍵值對 。
- list
--Redis 清單是簡單的字元串清單,按照插入的順序可以在清單的頭部(左邊)或者尾部(右邊)添加元素。
- set
--Redis的Set是String類型的無序集合。集合是通過hash表實作的,是以。添加、删除、查找的複雜度都是O(1)。
- zset
--zset 和 set一樣也是String的類型元素的集合,且不允許重複的隊員,不同的是每個元素都會關聯一個double類型的score。redis正是通過score來為集合中的成員進行從小到大的排序。分數(score)可以重複。
添加元素到集合,元素在集合中存在則對應更新相應的score。
四、安裝
1、Window
--服務端
1、window下載下傳位址:
https://github.com/MicrosoftArchive/redis/releases2、打開一個 cmd 視窗 使用cd指令切換目錄 E:\redis 運作 redis-server.exe redis.windows.conf
--用戶端
1、打開一個 cmd 視窗 使用cd指令切換目錄 E:\redis 運作 redis-cli.exe -h 127.0.0.1 -p 6379 -a 'mypass'
2、set myKey abc / get myKey
2、Linux
1、 wget http://download.redis.io/releases/redis-2.8.17.tar.gz
2、 tar -zxvf redis-2.8.17.tar.gz redis-2.8.17
3、 cd redis-2.8.17
4、 make
5、 cd src
6、 ./redis-server redis.conf
1、 cd src
2、 ./redis-cli
redis> set foo bar
OK
redis> get foo
"bar"
五、指令
1、String
-- set key value 儲存key和value。
-- get key 根據key得到value。
2、Hash
-- hmset myhash key1 val1 key2 val2 存儲hash值
-- hget myhash key1 根據hash中的某個key得到value
-- hgetall myhash 得到hash中的所有值
-- HDEL key field1 [field2] 删除一個或多個哈希字段
-- HKEYS key 擷取所有哈希表中的字段
-- HLEN key 擷取哈希字段數
3、List
-- lpush key val 向清單左邊插入元素
-- lpop key 從清單左邊移出元素
-- rpush key val 向清單右邊插入元素
-- rpop key 從清單右邊移出元素
-- rpushx key value 為已存在的清單添加值
-- LRANGE key start stop 擷取清單指定範圍内的元素
-- lindex key index 通過索引擷取清單中的元素
4、Set
-- sadd key value 添加元素
-- smembers key 根據key獲得集合中的所有成員
-- scard key 擷取集合的成員數
-- sdiff key1 key2 傳回給定所有集合的差集(key2的集合相對于key1集合的差集)
-- sunion 傳回給定集合的并集
-- smove source des member 把member從source集合到des集合
-- sdiffstore des key1 key2 傳回給定所有集合的差集,并存儲在des中
-- srandmember key count 傳回集合中一個或多個随機數
-- spop key1 移除并傳回集合中的一個随機元素
-- sismember key mem 判斷mem元素是否存在
5、Zset
-- zadd page 0 123
-- zadd page 1 234
-- zrangebyscore page 0 10
6、通用
-- 删除key:DEL key
-- 檢視所有的key:keys *
-- 序列化給定key,并傳回被傳回的值:DUMP key
-- 檢查給定key是否存在:EXISTS key
-- 為key設定過期時間:EXPIRE key seconds
-- 為key設定過期時間(時間戳):EXPIREAT key timestamp
-- 為key設過期時間(毫秒):PEXPIRE key milliseconds
-- 查找所有符合給定模式的key:KEYS pattern
-- 移除key的過期時間,key将持久儲存:persist key
-- 以毫秒為機關傳回key的剩餘過期時間:PTTL key
-- 傳回key所存儲的值得類型:TYPE key
HyperLogLog:
-- 添加指定元素到HyperLogLog中:PFADD key element
-- 傳回給定的HyperLogLog的基數估計值:PFCOUNT key
-- 将多個HyperLogLog 合并為一個HyperLogLog:PFMERGE destkey sourcekey
訂閱指令:
-- 訂閱一個或多個符合給定模式的頻道:psubscribe pattern
-- 退訂一個或多個符合給定模式的頻道:punsubscribe pattern
-- 檢視訂閱與釋出系統狀态:pubsub subcommand
-- 将資訊釋出到指定的頻道:publish channel message
-- 訂閱給定的一個或多個頻道的資訊:subscribe channel
-- 退訂給定的頻道:unsubscribe channel