redis搞定面試系列—基礎篇:redis快速上手

什麼是redis

什麼是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

從以上的解釋中,能夠總結出來數據庫

  1. Redis的數據基於內存存儲數據,支持多種數據結構,這就解釋了內存型。json

    將數據存儲在內存中緩存

    1. 優勢bash

      查詢效率很是高 ,內存的速率遠高於硬盤網絡

    2. 缺點數據結構

      服務關閉,內存中的數據會丟失,redis怎麼解決呢?多線程

      redis經過持久化機制會將內存中的數據持久化到磁盤中,這就是咱們說redis是數據庫的緣由了,後面會詳細的介紹 redis的持久化機制。

  2. 非關係型數據庫

    非關係型數據庫指的是redis的存儲結構,經過key-value的結構存儲數據(能夠簡單的認爲是map同樣的結構)。

    mysql oracle傳統的經過表進行數據存儲的數據庫,稱之爲關係型數據庫

  3. Redis能夠用做,數據庫,緩存等

redis的優勢

  1. 速度快,Redis使用C語言實現,基於內存,數據的讀寫效率很是的高,這也是爲何不少系統的緩存功能使用Redis來實現,可是須要明確的是Redis是一個數據庫,緩存只是它的一項應用而已。
  2. 單線程模型,所謂單線程模型就是每個請求都會有一個全新的線程來進行處理,這一點相似於Struts2,每個請求都會有一個新的線程來進行處理。這樣作的好處就是避免了線程頻繁切換帶來的系統開銷,同時也避免了讓人頭疼的多線程問題。
  3. 使用了非阻塞I/O,不在網絡上浪費時間,進一步提升了效率。
  4. 支持多種的數據類型,而且每一種數據類型都提供了豐富的操做命令,適用於不少特殊的場景,而且支持自定義命令建立個性化的操做命令。

安裝redis(Linux)

  1. 安裝gcc

    yum install gcc
    
    解釋:redis是用c語言編寫,須要先使用gcc編譯redis
    複製代碼
  2. 上傳 解壓redis安裝包

    tar -zxvf redis-3.0.7.tar.gz
    複製代碼
  3. 編譯

    命令:make
    複製代碼

    1571385896450

    注意:在redis的目錄中執行make命令

    安裝成功的標誌

    1571385952629

  4. 啓動redis服務端

    進入redis安裝目錄的src目錄
    
    使用./redis-server ../redis.conf 啓動redis數據庫
    複製代碼

    1571386111323

  5. 啓動redis命令行客戶端

    新Linux操做窗口中 執行 ./redis-cli
    
    該窗口就是redis的命令行窗口 能夠執行redis中的命令
    複製代碼

    1571386200275

  6. 簡單的測試redis存取命令

    1571386436636

基本使用(常見數據結構的命令)

redis的數據結構

redis的數據存儲結構:redis自己採用key-value的方式存儲數據

  • key的類型是string
  • value的類型包括5種:string set list zset(可排序,打分) hash

實際上Redis並沒有直接使用這些數據結構來實現key-value數據庫,而是基於這些數據結構建立了一個對象系統,redis數據庫裏面的每一個鍵值對都是由對象組成的,其中

  1. 數據庫的鍵老是一個字符串對象
  2. 數據庫鍵對應的值能夠是字符串對象,列表對象,哈希對象,集合對象,有序集合對象這五種對象中的一個

也就是說:當咱們執行了 set username zhangsan 命令以後,在redis內部會生成兩個字符串對象,分別作 key 和 value 存儲數據

redis的命令

在命令行客戶端中寫入命令能夠用來操做redis,常見的命令以下:

Redis 命令參考:doc.redisfans.com/

try Redis(不用安裝Redis便可體驗Redis命令):try.redis.io/

redis經常使用命令彙總

value的數據結構不一樣,對應支持的命令不一樣

string
命令 示例 做用
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的訪問 統計粉絲數、點擊次數

set
命令 示例 做用
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集合的並集

應用場景:查找共同好友

zset (sorted_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進行加分操做

應用場景:排行榜

hash
命令 示例 做用
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

應用場景:存儲對象,便於修改 分區緩存

list
命令 示例 做用
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
相關文章
相關標籤/搜索