1. 程式人生 > >跟王思聰熱狗圖一樣大熱的Redis,還不趕緊來Get一下?

跟王思聰熱狗圖一樣大熱的Redis,還不趕緊來Get一下?

  前言

  不禁喊出一句ig牛逼!哈哈哈 這個話題是不是有點過時了?但說到Redis,真的是被強行灌輸的,到處都會被安利Redis,嚇得只會mysql和oracle的我,趕緊去get一波..

  資料庫種類

  關係型資料庫

  常用的關係型資料庫:mysql oracle

  特點:

  •   使用sql進行操作
  •        儲存在磁碟

  非關係型資料庫

  常用的非關係型資料庫:redis  Memcached

  特點:

  •   不依賴sql語句
  •        儲存在記憶體中

  Redis安裝

  安裝路徑

  •   官網:https://redis.io,進入之後,點選“download”進行下載,最新版本:5.0.0,親測沒有問題
  •         Github:在首頁搜尋redis,選擇第一個進行下載也可以

  安裝方法

  1.   首先,將壓縮包解壓
  2.   進入目錄,看有Makefile,直接make,然後安裝:sudo make install 

  開源庫的安裝方法幾乎都一樣,更詳細的介紹可以參考我的這篇部落格:https://www.cnblogs.com/liudw-0215/p/9917422.html

  測試

  •   啟動server:redis-server
  •        啟動client:redis-cli
  •        在客戶端執行:ping 或ping hello,看到伺服器有回顯,說明Redis安裝成功,如下圖:

 

  至此,Redis安裝成功!

  Redis使用

  redis都是以鍵值對key-value儲存的,key一定是字串型別,value可能是字串、list、set、sortedset和hash型別!

  字串操作

  •   插入
set str1 hello
  •   查詢
get str1
  •   批量插入
mset str2 123 str2 456
  •   批量查詢
mget str1 str2 str3

  可以看到key是不允許重複的!

  list操作

  list可以理解為一串字串,也可以理解為連結串列;操作過程中,既可以按照佇列操作,也可以按照棧進行操作

  •   插入-頭插法
lpush ls1 aaa bbb ccc
  •        查詢

  查詢要稍微說一下,命令是lrange+key+範圍,要說明一下範圍該怎麼表示呢?從0開始可以,那麼結束該怎麼表示呢?不知道一共有多少個?redis採用-1表示最後一個,-2表示倒數第二個,查詢第一個到最後一個命令:

lrange ls1 0 -1

  查詢結果如下:

  

  說明:注意到顯示順序了麼?“l”代表從左開始插入,也就是頭插法;如果理解資料結構的頭插法,跟這是一樣的,因為redis底層也是用資料結構+演算法實現的!

  •   插入-尾插法
rpush ls2 1 2 3 4
  •   彈出最左邊
lpop ls2
  •   彈出最右邊
rpop ls2

     求list長度

llen ls1

  set操作

  set集合是沒有順序的,元素是唯一的

  插入

sadd set 1 2 3

  查詢

smembers set

  求差集(A-B)

sdiff A B

  求交集

sinter A B

  求並集

sunion A B

  執行結果如下:

 

  Redis的資料持久化

  redis將資料儲存在記憶體,速度比存在磁碟中快很多,大約在百萬量級的差別,但是宕機資料就沒了,這是不允許的!Redis提供了兩種解決辦法。

  RDB形式

  特點:存資料

  AOF形式

  特點:存命令

   hiredis介紹與安裝

  介紹  

    hiredis又是什麼鬼東西呢?它是封裝好的操作Redis的C語言API,安裝之後,C語言就可以呼叫API,去操作Redis了。

  安裝

  依然很簡單,Github首頁搜尋:hiredis,下載,解壓,make,sudo make install,一氣呵成!

  測試

  看到安裝目錄下,有個examples目錄,這個目錄就是例子,可以看到這個目錄下,有很多例子,可以用example.c,然後編譯一下,我的版本會報錯,我修改了包含的標頭檔案,然後正常,執行結果如下:

  

  至此,hiredis安裝成功!

  hiredis API介面的說明

   封裝好的API介面有很多,但掌握4個就可以完成基本的增刪改查了

  連線資料庫

  通過IP、埠進行連線,並返回redisContext,用於下面的使用

  

  傳送請求命令

   函式原型:

  void *redisCommand(redisContext *c, const char *format, ...);

  引數:

  第一個引數:就是redisConnect的返回值

  其餘引數就是可變引數了

  返回值:

  就很有意思了,可以參照下表:

  

  釋放資源 

  void freeReplyObject(void *reply);

  void redisFree(redisContext *c);