單個數據庫架構下,數據存儲的瓶頸是什麼?redis
Web數據庫架構的發展sql
優化數據庫的結構和索引,使用緩存技術緩解數據庫的壓力(Memcached+MySQL+垂直拆分)shell
MySQL主從複製和讀寫分離數據庫
分庫分表+水平拆分+MySQL集羣緩存
MySQL的擴展性瓶頸:擴展性差、大數據下IO壓力大、表結構更改困難安全
現在:負載均衡等一系列架構數據結構
爲何使用NoSQL?架構
傳統數據庫難以處理網狀數據或大量無固定結構的數據app
易擴展:數據之間無關係負載均衡
大數據量高性能:NoSQL的Cache是記錄級,MySQL的Cache是QueryCache,粒度不一樣
靈活的數據類型:隨時能夠存儲自定義的數據格式
RDBMS(Relational Database Management System):
NoSQL:
Redis一個高性能的K-V分佈式內存數據庫
Redis支持數據的持久化,能夠將內存中的數據保存在磁盤中,重啓時能夠再次加載進行使用
Redis不只支持簡單的K-V(string)型數據,還支持list、set、zset、hash等數據結構的存儲
Redis支持數據的備份,即master-slave模式的數據備份
難點:數據類型多樣化、數據源多樣化和變化重構、數據源和數據服務的耦合
解決方案:統一數據平臺服務層(UDSL)
K-V、BSon(Binary Json)、列族、圖形
傳統ACID:Atomicity、Consistency、Isolation、Durability
CAP(只能3選2):Consistency(強一致性)、Availability(可用性)、Partition tolerance(分區容錯性)
BASE:Basically Available(基本可用)、Soft state(軟狀態)、Eventually consistent(最終一致)
內存存儲和持久化
取最新n個數據的操做
設定過時時間
發佈、訂閱消息系統
定時器、計數器
string:二進制安全,能夠存儲jpg圖片或序列化對象。一個redis字符串value最大能夠是512M
hash:一個string類型的field和value的映射表,適合用於存儲對象,相似於Map<String,Object>
list:底層是經過鏈表實現的。能夠添加元素至頭部或尾部
set:集合,底層基於hashtable
zset:sorted set,每一個元素都會關聯一個double類型的分數,經過分數來進行排序
key:keys *
exsits [key]
move [key] [db]
expire [key] [seconds]
ttl [key]
type [key]
del[key]
string:set
/get
/del
/append
/strlen
incr
/decr
/incrby
/decrby
(僅對數字有效) getrange
/setrange
setex
(set with expire) setnx
(set if not exist) mset
/mget
/msetnx
get
/set
list:lpush
/rpush
/lrange
(l/r表明left/right) lpop
/rpop
lindex
llen
lrem
ltrim
rpoplpush
lset
linsert...before/after
set:sadd
/smembers
/sismember
scard
srem
srandmember
spop
smove
sdiff
sinter
sunion
hash:hset
/hget
/hmset
/hmget
/hgetakk
/hdel
hlen
hexists
hkeys
/hvals
hincrby
/hincrbyfloat
hsetnx
zset:zadd
zrange
/zrevrange
(withscores) zrangebyscore
/zrevrangebyscore
(使用'('表示開區間,使用limit對結果進行截取) zrem
zcard
/zcount
zrank
zscore
zrevrank
GENERAL(通用):
On Windows, daemonize and pidfile are not supported.
SECURITY(安全):Redis認證默認關閉
開啓認證:
config set requirepass "[password]"
而後操做前使用下列語句進行權限認證:
auth [password]
LIMITS(限制)
maxclients:10000(最大鏈接數)
maxmemory:(最大內存,到達最大內存後沒法進行寫入操做,但能夠繼續讀取)
maxmemory-policy:noeviction(過時策略,可選項以下)
volatile-lru -> remove the key with an expire set using an LRU algorithm
allkeys-lru -> remove any key according to the LRU algorithm
volatile-random -> remove a random key with an expire set
allkeys-random -> remove a random key, any key
volatile-ttl -> remove the key with the nearest expire time (minor TTL)
noeviction -> don't expire at all, just return an error on write operations
maxmemory-sample:5(樣本數量,越高可使LRU或TTL越精確,但會增長CPU功耗)
待續~