1、NoSQL和關係型數據庫區別數據庫
NoSQL非關係型數據庫:Redis、MongoDB、HBase等,基於Key-Value存儲,採用命令操做。緩存
關係型數據庫:Oracle、MySQL、DB二、SQL Server等,基於表結構存儲,採用SQL操做。服務器
2、Redis簡介網絡
Redis是由意大利人Salvatore Sanfilippo(網名:antirez)開發的一款內存高速緩存數據庫。Redis全稱爲: Remote Dictionary Server(遠程數據服數據結構
務),該軟件使用C語言編寫,是典型的NoSQL數據庫服務器。Redis是一個Key-Value存儲系統,它支持豐富的數據類型,如String、Hash、List、Set、app
Zset(Sorted Set)。性能
3、Redis特色spa
優勢:.net
缺點:線程
內存,若是內存增加過快,須要按期刪除數據。
功能,可是仍是有可能完整重同步的,好比新上線的備機。
備註:
在系統中,一般使用Redis作數據緩存使用。
查詢緩存:第一次查詢時會從數據庫中取出數據放入緩存,後續查詢都將從緩存中讀取數據。
添加/更新緩存:將用戶數據經過檢測後放入緩存,而後給用戶響應,後臺開啓線程取數據處理。
4、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)個。
5、Redis操做命令
5.一、字符串操做
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.二、哈希操做
hset key 字段名 字段值 //設置一組 hmset key 字段名 字段值 字段名 字段值 //設置多組 hget key 字段名 //獲取一個字段值 hmget key 字段名1 字段名2 //獲取多個字段值 hlen key //獲取字段數量 hkeys key //查看字段名 hdel key 字段名 //刪除字段名
5.三、列表操做
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.四、集合操做
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.五、有序集合
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.六、key操做
keys pattern //查看key del key //刪除key expire key time //設置有效時間(秒) type key //判斷value值類型 rename key newkey //修改key名稱
6、Redis文件格式
Redis使用了兩種文件格式:全量數據和增量請求。
全量數據:是把內存中的數據寫入磁盤,便於下次讀取文件時進行加載。
增量請求:是把內存中的數據序列化爲操做請求,用於讀取文件進行replay獲得數據,序列化的操做包括SET、RPUSH、SADD、ZADD。
備註:Redis的存儲分爲內存存儲、磁盤存儲和log文件三部分,配置文件中有三個參數對其進行配置。
7、Redis應用場景
(1)會話緩存(Session Cache)
(2)全頁緩存(FPC)
(3)隊列
(4)排行榜/計數器
(5)發佈/訂閱
參考自:
https://blog.csdn.net/weixin_39671217/article/details/78021732