NoSQL
not only sql :泛指所有的非關係型數據庫。
NoSQL可以優化的需求:
1、對數據庫高併發的讀寫需求
2、對海量數據的高效率存儲和訪問需求
3、對數據庫的高可擴展性和高可用性的需求
4、靈活的數據模型,無需事先爲存儲的數據數據建立字段,隨時可以存儲自定義數據格式
NoSQL類型數據庫的產生就是爲了解決大規模數據集合多重數據種類帶來的挑戰,尤其是大數據。
分類
1、鍵值存儲數據庫(Redis...)
2、文檔存儲數據庫(MongoDB...)
3、列存儲數據庫
4、圖形數據庫
Redis
Redis是用c語言開發的開源、高可用性的key-value數據庫。提供多多種鍵值數據類型適應不同場景需求。鍵值類型有以下五種:
字符串string、字符串列表list、哈希hash、字符串集合set、有序字符串集合sorted-set
hash:可以看成具有String key 和String value的map容器。非常適合存儲對象信息。如果包含很少字段,則佔用很少磁盤空間。
redis的應用場景
- 緩存(數據查詢、短連接、新聞內容、商品內容)*
- 聊天室在線好友
- 任務隊列(秒殺、搶購、12306)
- 應用排行
- 網站訪問統計
- 數據過期處理(精確到毫秒)
- 分佈式集羣框架的session分離
redis使用
redis-server文件用來打開redis數據庫。redis-cli文件是redis的客戶端,在打開redis-server後使用redis-cli可以在客戶端對redis數據庫進行操作。
ping | 測試redis和客戶端的連接是否正常,控制檯打印PONG代表正常 |
set/get |
可以向redis設置數據庫/獲取數據庫 |
del (key) |
刪除指定key的內容/刪除指定key |
keys * | 查看當前數據庫的所有key值 |
select | 選擇使用的數據倉庫,範圍是0~15 |
move | 將制定的數據庫從當前倉庫移動到指定倉庫 |
incr key | 將key的value原子性遞增1,如果key不存在,則初值爲0,遞增爲1;key不能轉化爲整形,則執行失敗,返回錯誤信息。 |
decr key | 道理通incr key |
incrby key increment | 將key的value原子性遞增increment,如果key不存在,則初值爲0,遞增後爲increment;key不能轉化爲整形,則執行失敗,返回錯誤信息。 |
decrby key increment | 道理通decrby key increment |
append key value | 如果該key存在,則在原有value後追加value值;如果該key不存在,重新創建一個key/value |
hset key field value | 爲指定key設置field-value對 |
hmset keyfield value[field2 value2 ...] |
設置key的多個field-value對 |
hget key field | 返回指定key的field的值 |
hmget key field1 field2 ... | 返回key的多個field的值 |
hgetall key | 獲取key中的所有field-value |
hdel key field[field ...] | 刪除一個或多個字段,返回值是被刪除字段的個數 |
.... | ....... |
dbsize | 當前數據庫key的數目 |
flushdb | 刪除當前數據庫中所有key |
flushall | 刪除所有數據庫的所有key |
消息訂閱和發佈:
不同redis客戶端之間進行會話。
發佈: publish 頻道名 '消息內容'
單頻道訂閱:subscribe 頻道名
正則匹配多頻道訂閱:psubscribe 頻道名正則式
redis隔離級別:串行化
因爲redis操作的是內存所以效率很高,使用串行化更安全可靠。
redis不同於關係型數據庫,它不具有原子性。再奪天語句執行中,有語句執行失敗時,其他語句仍會執行。
redis事務
multi:開啓事務
exec:提交事務
discard:回滾
redis持久化
修改配置文件可修改持久化爲:
無持久化
RDB:內存快照,將內存中的一部分存儲到磁盤中
AOF:日誌形式記錄每一個寫操作
RDB和AOF組合
AOF佔用空間大於RDB,運行效率低於RDB