今天為大家分享一個(gè)系列的教程Redis高級(jí)應(yīng)用實(shí)戰(zhàn)分布式緩存,今天文章內(nèi)容概要:1、那么分布式緩存為什么要用Redis,什么是redis,2、為什么要用緩存機(jī)制,3、而Redis作為單線程模型為什么效率還這么高?4、Redis服務(wù)安裝及常用命令解析
1. 什么是Redis
NoSQL
分布式緩存中間件
key-value存儲(chǔ)
提供海量的數(shù)據(jù)存儲(chǔ)訪問(wèn)
所有數(shù)據(jù)放在內(nèi)存中,讀取速度非???/p>
非關(guān)系型,分布式、開(kāi)源,支持水平擴(kuò)展
2. 為什么使用內(nèi)存緩存數(shù)據(jù)庫(kù)
因?yàn)樵谖覀兊幕A(chǔ)架構(gòu),我們的數(shù)據(jù)庫(kù)一般都是第一節(jié)點(diǎn)(主從、MMM、MHA)
一遍導(dǎo)致數(shù)據(jù)庫(kù)緩慢或宕機(jī)的都是查詢導(dǎo)致的,update、delete,80%的SQL都是查詢,如果能夠?qū)⑦@80%SQL抽離到緩存中;
Redis VS Memcache VS Ehcache
Ehcache
不支持集群,單點(diǎn)
不支持分布式,存儲(chǔ)容量不支持?jǐn)U展
基于Java開(kāi)發(fā)的,被apache認(rèn)證
基于JVM緩存的
簡(jiǎn)單、輕巧、方便(廣泛的應(yīng)用于hibernate,Mybatis)
優(yōu)點(diǎn)
缺點(diǎn)
Memcache
無(wú)法容災(zāi)
無(wú)法持久化
簡(jiǎn)單的key-value存儲(chǔ)
內(nèi)存使用率比較高
支持多核多線程
優(yōu)點(diǎn)
缺點(diǎn)
Redis
單線程(不建議進(jìn)行大數(shù)據(jù)量的存儲(chǔ))
單核(無(wú)法充分利用CPU多核性能,建議使用多實(shí)例)
豐富的數(shù)據(jù)結(jié)構(gòu)
持久化:RDB、AOF
主從同步、故障轉(zhuǎn)移(MySQL;主從)
內(nèi)存數(shù)據(jù)庫(kù)
優(yōu)點(diǎn)
缺點(diǎn)
3、Redis作為單線程模型為什么效率還這么高?

1、純內(nèi)存訪問(wèn):數(shù)據(jù)存放在內(nèi)存中,內(nèi)存的響應(yīng)時(shí)間是100納秒
2、非阻塞式的I/O操作:Redis采用epoll作為I/O多路復(fù)用技術(shù)的實(shí)現(xiàn)
3、采用單線程避免了不必要的上下文切換和競(jìng)爭(zhēng)條件
什么是多路復(fù)用
如果你是一個(gè)老師,有30個(gè)學(xué)生做一道題,做完需要檢查
1、按順序檢查,A,B,C
2、你創(chuàng)建30個(gè)分身,來(lái)檢查30個(gè)結(jié)果
3、誰(shuí)做完了誰(shuí)舉手,A,B、C,D
4. Redis服務(wù)安裝及常用命令解析
# redis下載解壓后yum -y install gcc-c++make && make install
# cd /usr/local/bin 將redis相關(guān)的命令安裝進(jìn)來(lái)# 進(jìn)入redis根目錄對(duì)redis.conf進(jìn)行修改daemonize yes
#后臺(tái)執(zhí)行dir /usr/local/redis-6379
#工作目錄bind 0.0.0.0 #ip訪問(wèn)控制,這里是放開(kāi)的意思requirepass icoding
#設(shè)置redis密碼port 6379pidfile /var/run/redis_6379.pid
#進(jìn)程id存放文件maxcliens 0 #客戶端的最大連接數(shù),默認(rèn)0就是不限制timeout 0
#客戶端連接的超時(shí)時(shí)長(zhǎng),默認(rèn)0就是關(guān)閉不限制#啟動(dòng)Redisredis-server redis.conf
5.Redis五大數(shù)據(jù)類型
string
keys *#查看redis當(dāng)前數(shù)據(jù)庫(kù)所有的key-value,生成上不要用
keys abc*
set / setnx : 后者如果有數(shù)據(jù)就不生效,前者有數(shù)據(jù)就覆蓋
expire username
# redis默認(rèn)配置有16個(gè)DB數(shù)據(jù)庫(kù),可以增減
flushdb #刪除當(dāng)前DB中所有數(shù)據(jù)
flushall#刪除所有DB中的數(shù)據(jù)
# 如果要關(guān)閉這兩個(gè)命令的
rename-command FLUSHDB ""# rename-command FLUSHDB "icoding
floushdb"rename-command FLUSHALL ""
hash:對(duì)象
# 比如一個(gè)對(duì)象,這個(gè)一般在購(gòu)物車中使用比較多
user {?
name: icoding?
age: 18?
sex: male
}
hset user name icoding age 18 sex male
type user
hget user
namehgetall user?
list:棧
# 做管道通知
lpush userList 1 2 3 4 5
lpop user
Listrpop
userList
set:集合
sadd userSet 1 2 3 4 5 6 5 4 3 2 1
smembers userSet
srandmember userSet 2#隨機(jī)展示兩個(gè)
spop userSet 2#隨機(jī)取兩個(gè) 可以做抽獎(jiǎng)
zset:帶有一個(gè)數(shù)據(jù)標(biāo)簽的集合
zadd za1 10.99 apple 20.11 peach 40.89 banana 30.80 pear 50.79 cherry
zrange za1 0 -1 withscores
GEO
geoadd china:city 116.408 39.904
beijing 121.445 31.213
shanghai 113.265 23.108
guangzhou 114.109 22.544
shenzhen 108.969 34.285
xian 108.55 34.09
changan
如果需要本期圖文教程的視頻教程,請(qǐng)關(guān)注“艾編程”公眾號(hào),回復(fù)關(guān)鍵詞“Redis”或者“分布式緩存”,看本期課程的視頻+圖文教程,還能收獲更多哦!