一、NoSQL和關係型資料庫區別 NoSQL非關係型資料庫:Redis、MongoDB、HBase等,基於Key-Value存儲,採用命令操作。 關係型資料庫:Oracle、MySQL、DB2、SQL Server等,基於表結構存儲,採用SQL操作。 二、Redis簡介 Redis是由義大利人Sal ...
一、NoSQL和關係型資料庫區別
NoSQL非關係型資料庫:Redis、MongoDB、HBase等,基於Key-Value存儲,採用命令操作。
關係型資料庫:Oracle、MySQL、DB2、SQL Server等,基於表結構存儲,採用SQL操作。
二、Redis簡介
Redis是由義大利人Salvatore Sanfilippo(網名:antirez)開發的一款記憶體高速緩存資料庫。Redis全稱為: Remote Dictionary Server(遠程數據服
務),該軟體使用C語言編寫,是典型的NoSQL資料庫伺服器。Redis是一個Key-Value存儲系統,它支持豐富的數據類型,如String、Hash、List、Set、
Zset(Sorted Set)。
三、Redis特點
優點:
- 性能極高:Redis能支持每秒10萬讀寫頻率。
- 支持豐富的數據類型:包括String、Hash、List、Set、Zset(Sorted Set)等多種數據類型。
- 原子性:所有操作都是原子性的(一起成功,或者一起失敗)。
- 支持持久化操作:將記憶體數據同步到數據文件中。
- 提供了事務、消息傳遞等功能。
缺點:
- 由於是記憶體資料庫,所以單台機器存儲的數據量,取決於機器本身的記憶體大小。雖然Redis本身有Key過期策略,但是還是需要提前預估及節約
記憶體,如果記憶體增長過快,需要定期刪除數據。
- 如果進行完整重同步,由於需要生成rdb文件併進行傳輸,因此會占用主機的CPU並會消耗網路的帶寬。雖然Redis 2.8版本已經有部分重同步的
功能,但是還是有可能完整重同步的,比如新上線的備機。
- 修改配置文件後,重啟將硬碟中的數據載入到記憶體時,時間比較久。在這個過程中,Redis不能提供服務。
備註:
在系統中,通常使用Redis做數據緩存使用。
查詢緩存:第一次查詢時會從資料庫中取出數據放入緩存,後續查詢都將從緩存中讀取數據。
添加/更新緩存:將用戶數據通過檢測後放入緩存,然後給用戶響應,後臺開啟線程取數據處理。
四、Redis常用數據類型
Redis常用的數據類型有5種,即String、Hash、List、Set、Zset(Sorted Set):
String--字元串
String是簡單的Key-Value 類型,Value不僅可以是String,也可以是數字(當數字類型用Long可以表示的時候encoding就是整型,其它都存儲在
sdshdr當做字元串),在List、Set和Zset中包含的獨立的元素類型都是Redis String類型。String類型的Value最大為512MB。
Hash--字典
Hash是最接近關係型資料庫結構的數據類型,可以將資料庫中一條記錄或程式中一個對象轉換成hashmap存放在Redis中。在Memcached中,我們
經常將一些結構化的信息打包成hashmap,然後在客戶端序列化後存儲為一個字元串的值 (一般是JSON格式),比如用戶的昵稱、年齡、性別等。
Hash的鍵值對個數最多為2^32-1(4294967295)個。
List--列表
List說白了就是鏈表類型(雙端鏈表),主要功能是push、pop、獲取一個範圍的所有值等,其中的Key可以理解為鏈表的名字。在Redis中,List就
是Redis String的列表,按照插入順序進行排序,比如使用LPUSH命令在List頭插入一個元素、使用RPUSH命令在List尾插入一個元素。當這兩個命令
之一作用於一個空的Key時,一個新的List就創建出來了。List的元素個數最多為2^32-1(4294967295)個。
Set--集合
Set就是一個集合,集合的概念就是一堆不重覆值的組合。利用Redis提供的Set數據結構,可以存儲一些集合性的數據。在Redis中,Set就是Redis
String的無序集合,不允許有重覆元素,對Set的操作有交集、並集、差集等。Set的元素個數最多為2^32-1(4294967295)個。
ZSet(Sorted Set)--有序集合
和Set相比,Sorted Set是將Set中的元素增加了一個權重參數score,使得集合中的元素能夠按score進行有序排列,對於已經有序的Zset,仍然可以
使用SORT命令,通過指定ASC|DESC參數對其進行排序。Zset的元素個數最多為2^32-1(4294967295)個。
五、Redis操作命令
5.1、字元串操作
set key value //設置value值 get key //獲取value值 strlen key //獲取value長度 incr key //將value加1 incrby key i //將value加i decr key //將value減1 decrby key i //將value減i append key value //將原有key的值拼接上value值
5.2、哈希操作
hset key 欄位名 欄位值 //設置一組 hmset key 欄位名 欄位值 欄位名 欄位值 //設置多組 hget key 欄位名 //獲取一個欄位值 hmget key 欄位名1 欄位名2 //獲取多個欄位值 hlen key //獲取欄位數量 hkeys key //查看欄位名 hdel key 欄位名 //刪除欄位名
5.3、列表操作
lpush key value //從頭部放入值(key列表存在插入,不存在創建列表插入) rpush key value //從尾部放入值 lpop key //從頭部刪除一個元素 rpop key //從尾部刪除一個元素 lrem key count value //刪除多少個值等於value的元素 lindex key index //獲取index位置的value值 lrange key start end //獲取指定範圍的元素 linsert key before|after 元素 要插入的值 //插入元素 lset key index value //更新index位置的value值 llen key //獲取列表元素數
5.4、集合操作
sadd key value value //向集合添加元素 srem key value //刪除value元素 scard key //獲取集合元素數量 smembers key //查看所有元素 srandmember key count //獲取count個隨機數 sinter key1 key2 //兩個集合交集,key1和key2都有 sunion key1 key2 //兩個集合併集,去重覆合併 sdiff key1 key2 //差集,key1有,key2沒有
5.5、有序集合
zadd key score value //向集合添加元素 zrem key value //刪除元素 zcard key //元素數量 zrange key start end //獲取指定範圍的元素(小到大) zrevrange key start end //獲取指定範圍的元素(大到小) zrevrank key value //獲取value索引(大到小) zrank key value //獲取value索引(小到大)
5.6、key操作
keys pattern //查看key del key //刪除key expire key time //設置有效時間(秒) type key //判斷value值類型 rename key newkey //修改key名稱
六、Redis文件格式
Redis使用了兩種文件格式:全量數據和增量請求。
全量數據:是把記憶體中的數據寫入磁碟,便於下次讀取文件時進行載入。
增量請求:是把記憶體中的數據序列化為操作請求,用於讀取文件進行replay得到數據,序列化的操作包括SET、RPUSH、SADD、ZADD。
備註:Redis的存儲分為記憶體存儲、磁碟存儲和log文件三部分,配置文件中有三個參數對其進行配置。
七、Redis應用場景
(1)會話緩存(Session Cache)
(2)全頁緩存(FPC)
(3)隊列
(4)排行榜/計數器
(5)發佈/訂閱
參考自:
https://blog.csdn.net/weixin_39671217/article/details/78021732