什麼是Redis,通常咱們都會這樣介紹:redis是一個內存型非關係型數據庫。這樣redis的一個常見的介紹,那麼什麼是內存型,非關係型呢?mysql
官方是這樣介紹的:"Redis is an open source (BSD licensed),in-memory data structure store, used as a database,cache and message broker."redis
翻譯一下就是:Redis是一個開源的、基於內存的數據結構存儲器,能夠用做數據庫、緩存和消息中間件。sql
從以上的解釋中,能夠總結出來數據庫
Redis的數據基於內存存儲數據,支持多種數據結構,這就解釋了內存型。json
將數據存儲在內存中緩存
優勢bash
查詢效率很是高 ,內存的速率遠高於硬盤網絡
缺點數據結構
服務關閉,內存中的數據會丟失,redis怎麼解決呢?多線程
redis經過持久化機制會將內存中的數據持久化到磁盤中,這就是咱們說redis是數據庫的緣由了,後面會詳細的介紹 redis的持久化機制。
非關係型數據庫
非關係型數據庫指的是redis的存儲結構,經過key-value的結構存儲數據(能夠簡單的認爲是map同樣的結構)。
mysql oracle傳統的經過表進行數據存儲的數據庫,稱之爲關係型數據庫
Redis能夠用做,數據庫,緩存等
安裝gcc
yum install gcc
解釋:redis是用c語言編寫,須要先使用gcc編譯redis
複製代碼
上傳 解壓redis安裝包
tar -zxvf redis-3.0.7.tar.gz
複製代碼
編譯
命令:make
複製代碼
注意:在redis的目錄中執行make命令
安裝成功的標誌
啓動redis服務端
進入redis安裝目錄的src目錄
使用./redis-server ../redis.conf 啓動redis數據庫
複製代碼
啓動redis命令行客戶端
新Linux操做窗口中 執行 ./redis-cli
該窗口就是redis的命令行窗口 能夠執行redis中的命令
複製代碼
簡單的測試redis存取命令
redis的數據存儲結構:redis自己採用key-value的方式存儲數據
實際上Redis並沒有直接使用這些數據結構來實現
key-value
數據庫,而是基於這些數據結構建立了一個對象系統,redis數據庫裏面的每一個鍵值對都是由對象組成的,其中
- 數據庫的鍵老是一個字符串對象
- 數據庫鍵對應的值能夠是字符串對象,列表對象,哈希對象,集合對象,有序集合對象這五種對象中的一個
也就是說:當咱們執行了
set username zhangsan
命令以後,在redis內部會生成兩個字符串對象,分別作 key 和 value 存儲數據
在命令行客戶端中寫入命令能夠用來操做redis,常見的命令以下:
Redis 命令參考:doc.redisfans.com/
try Redis(不用安裝Redis便可體驗Redis命令):try.redis.io/
value的數據結構不一樣,對應支持的命令不一樣
命令 | 示例 | 做用 |
---|---|---|
set | set k v | 添加一個key-value |
get | get k | 根據key獲取value |
exists | exists k | 判斷key是否存在 |
del | del k | 根據key刪除對應數據該命令適用於其餘4個數據結構 |
mset | mset k1 v1 k2 v2 | 一次性設置多個key-value |
mget | mget k1 k2 | 一次性根據多個key獲取多個value |
incr | incr k1 | 對該key對應的value(數字),進行加1 |
decr | decr k1 | 對該key對應的value(數字),進行減1 |
應用場景:緩存查詢結果(json或者序列化) 用戶訪問記錄 例如:經過記錄ip-訪問次數來顯示ip的訪問 統計粉絲數、點擊次數
命令 | 示例 | 做用 |
---|---|---|
sadd | sadd k v | 向key對應的set集合中添加一個元素 |
smembers | smembers k | 獲取set集合中全部元素 |
scard | scard k | 獲取set集合中元素個數 |
spop | spop k | 刪除set集合中任意一個元素 |
srem | srem k v | 刪除set集合中指定元素 |
sdiff | sdiff k1 k2 | 返回k1對應集合中去重和k2對應集合重複部分 |
sinter | sinter k1 k2 | 獲取k1對應set集合和k2對應set集合交集 |
sunion | sunion k1 k2 | 獲取k1對應set集合和k2對應set集合的並集 |
應用場景:查找共同好友
命令 | 示例 | 做用 |
---|---|---|
zadd | zadd k 分數 v | 在key對應的有序集合中添加一個新元素 |
zrevrange | zrevrange k start stop | 獲取下標區間的元素,按照分數正向排名 |
zcard | zcard k | 返回key對應的zset集合元素個數 |
zrem | zrem k v | 刪除key對應集合中value元素 |
zrevrank | zrevrank k v | 獲取value在key對應集合中排名(從0開始) |
zscore | zscore k v | 獲取value在key對應的zset集合中的分數 |
zincrby | zincrby k n v | 對key對應的set集合中的v進行加分操做 |
應用場景:排行榜
命令 | 示例 | 做用 |
---|---|---|
hset | hset k k1 v1 | 向hash中添加一個k-v |
hget | hget k k1 | 根據k獲取hash,在根據k1從hash中獲取v |
hgetall | hgetall k | 獲取k對應的hash中全部的k-v |
hdel | hdel k k1 | 刪除k對應的hash中的k1數據 |
hkeys | hkeys k | 獲取k對應hash中全部key |
hvals | hvals k | 獲取k對應hash中全部的value |
hexists | hexists k k1 | 判斷hash中是否存在對應的k |
應用場景:存儲對象,便於修改 分區緩存
命令 | 示例 | 做用 |
---|---|---|
rpush | rpush k v | 從list集合右側添加一個元素 |
rpop | rpop | 刪除list集合右側的元素 |
lpush | lpush k v | 從list集合左側添加一個元素 |
lpop | lpop | 刪除list集合左側的元素 |
llen | llen k | 獲取list集合長度 |
lrange | lrange k start stop | 獲取liist集合下標中範圍的元素 |
lindex | lindex k 下標 | 獲取list集合中某個下標的元素 |
應用場景:關注列表、消息隊列
命令 | 示例 | 做用 |
---|---|---|
seletct database的編號 | select 0 | redis默認16個庫選擇指定庫操做,默認從0開始 |
flushdb | flushdb | 清空當前操做的庫 |
flushall | flushall | 清空redis全部庫 |
expire key | expire key | 設置key存活時間的秒 |
ttl key | ttl key | 查看key對應的數據的存活時間 |
pexpire key | pexpire key | 存活時間的毫秒 |
pttl key | pttl key | 查看key對應的數據的存活時間,毫秒單位 |
keys * | keys * | 打印全部key |