1. Nosql非關(guān)系型數(shù)據(jù)數(shù)
2. Mysql關(guān)系型數(shù)據(jù)庫
Redis存儲類型
官網(wǎng)查詢命令 | 命令行help
1. 鍵值對,value支持多種不同結(jié)構(gòu)
2. 單線程
3. 低延遲,數(shù)據(jù)快(內(nèi)存,IO多路復用,良好編碼)
4. 支持數(shù)據(jù)持久化(定時)
5. 支持主從集群
6. 支持多語言客戶端
Mysql 與Redis 差別
Redis通用命令
Help: 查看命令使用幫助文檔
Keys: 查看所有key 支持模糊 keys? name*
del: 刪除key
EXISTS: 判斷key是否存在
EXPIRE: 給一個key設(shè)置有效期吝羞,有效期到期時該key會被自動刪除
TTL: 查看一個KEY的剩余有效期
SET:添加或者修改已經(jīng)存在的一個String類型的鍵值對
GET:根據(jù)key獲取String類型的value
MSET:批量添加多個string類型的鍵值對
MGET:根據(jù)多個key獲取多個String類型的value
INCR:讓一個整型的key自增1
INCRBY:讓一個整型的key自增并指定步長兰伤,例如:incrby num 2讓num值自增INCRBYFLOAT:讓一個浮點類型的數(shù)字自增并指定步長
SETNX:添加一個String類型的鍵值對,前提是這個kev不存在钧排,否則不執(zhí)行
SETEX:添加一個String類型的鍵值對医清,并且指定有效期
Hash的常用命令
HSET key field value: 添加或者修改hash類型key的field的值
HGET key field: 獲取一個hash類型key的field的值e
HMSET:批量添加多個hash類型key的field的值
HMGET:批量獲取多個hash類型key的field的值
HGETALL:獲取一個hash類型的key中的所有的field和value
HKEYS:獲取一個hash類型的key中的所有的field
HVALS:獲取一個hash類型的key中的所有的value
HINCRBY:讓一個hash類型key的字段值自增并指定步長
HSETNX:添加一個hash類型的key的field值,前提是這個field不存在卖氨,否則不執(zhí)行
List的常用命令
LPUSH key element ...:向列表左側(cè)插入一個或多個元素
LPQP key: 移除并返回列表左側(cè)的第一個元素会烙,沒有則返回nil
RPUSH key element ...: 向列表右側(cè)插入一個或多個元素
RPOP key: 移除并返回列表右側(cè)的第一個元素
LRANGE key star end:返回一段角標范圍內(nèi)的所有元素
BLPOP和BRPOP:與LPOP和RPOP類似,只不過在沒有元素時等待指定時間筒捺,而不是直接返回nil
Set的常用命令
SADD key member ... :向set中添加一個或多個元素
SREM key member ...:移除set中的指定元素
SCARD key: 返回set中元素的個數(shù)
SISMEMBER key member:判斷一個元素是否存在于set中SMEMBERS:獲取set中的所有元素
SINTER key1 key2...:求ey1與key2的交集
SDIFF key1 key2 ... :求key1與key2的差集
SUNION key1 key2..:求key1和key2的并集
SortedSet的常用命令
ZADD key score member: 添加一個或多個元素到sorted se柏腻,如果已經(jīng)存在則更新其score值
ZREM key member: 刪除sorted set中的一個指定元素
ZSCORE key member:獲取sorted set中的指定元素的score值
ZRANK key member: 獲取sorted set 中的指定元素的排名
ZCARD key:獲取sorted set中的元素個數(shù)
ZCOUNT key min max: 統(tǒng)計score值在給定范圍內(nèi)的所有元素的個數(shù)
ZINCRBY keyincrement member: 讓sorted set中的指定元素自增,步長為指定的increment值
ZRANGE key min max: 按照score排序后系吭,獲取指定排名范圍內(nèi)的元素
ZRANGEBYSCORE key min max: 按照score排序后五嫂,獲取指定score范圍內(nèi)的元素0ZDIFF、ZINTER肯尺、ZUNION: 求差集沃缘、交集、并集
Redis 層級存儲
Key: 多個層級:隔開 例: (xuexiao:nianji:banji:zhangsan)
Redis緩存穿透
緩存擊穿原因一: 一個被高并發(fā)訪問并且緩存重建業(yè)務較復雜的key突然失效了则吟,無數(shù)的請求訪問會在瞬間給數(shù)據(jù)庫帶來巨大的沖擊槐臀。
緩存擊穿原因二:?緩存穿透產(chǎn)生的原因: 用戶請求的數(shù)據(jù)在緩存中和數(shù)據(jù)庫中都不存在,不斷發(fā)起請求給數(shù)據(jù)庫帶來巨大壓力
解決方案:
1. 緩存null值?
2. 布隆過濾
3. 增強id的復雜度氓仲,避免被猜測id規(guī)律
4. 做好數(shù)據(jù)的基礎(chǔ)格式校驗
Redis 雪崩
緩存雪崩: 在同一時段大量的緩存key同時失效或者Redis服務宕機水慨,導致大量請求到達數(shù)據(jù)庫得糜,帶來巨大壓力。
解決方案:
1. 給不同的Key的TTL添加隨機值
2. 利用Redis集群提高服務的可用性
3. 給緩存業(yè)務添加降級限流策略
4. 給業(yè)務添加多級緩存