跟王思聰熱狗圖一樣大熱的Redis,還不趕緊來Get一下?
前言
不禁喊出一句ig牛逼!哈哈哈 這個話題是不是有點過時了?但說到Redis,真的是被強行灌輸的,到處都會被安利Redis,嚇得只會mysql和oracle的我,趕緊去get一波..
資料庫種類
關係型資料庫
常用的關係型資料庫:mysql oracle
特點:
- 使用sql進行操作
- 儲存在磁碟
非關係型資料庫
常用的非關係型資料庫:redis Memcached
特點:
- 不依賴sql語句
- 儲存在記憶體中
Redis安裝
安裝路徑
- 官網:https://redis.io,進入之後,點選“download”進行下載,最新版本:5.0.0,親測沒有問題
- Github:在首頁搜尋redis,選擇第一個進行下載也可以
安裝方法
- 首先,將壓縮包解壓
- 進入目錄,看有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);