一、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
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/19783.html
標籤:NoSQL
上一篇:MongoDB入門(介紹、安裝)
