日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

java实现缓存中间件,Redis,分布式系统中不可少的缓存中间件

發布時間:2025/3/15 windows 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java实现缓存中间件,Redis,分布式系统中不可少的缓存中间件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.為什么要用緩存

內存在整個計算機系統來說也就是一個緩存,CPU操作內存速度很快;因為操作數據的時候,先從硬盤中取出數據放到內存中,然后CPU操作數據

緩存:提升訪問效率,將一些頻繁訪問地放在緩存里面

image.png

常見的緩存:

Ehcache:繼承在應用服務器里面內,很好集成,方便簡易;容量小

Mem cache:存儲類型很單一,就是字符串

Redis:存儲類型豐富,性能非常高,可靠性高

下面重點介紹Redis

1.Redis是一種nosql (not only sql)

有以下特性:

key value 雙列集合 map

value 支持多種多樣 :

string

hash(相當于對象)

list

set

sorttedSet

key 有過期特性,唯一的;

2.Redis具有發布訂閱功能

3.Redis具有一定的持久化的特性

2.數據類型String,分布式鎖

2.1 String的基本操作

image.png

默認是-1,即永久存儲的

設置過期時間:

image.png

如果我們這時候再set同一個key,里面的值會被覆蓋掉

2.2 setnx

setnx:只有當key不存在的時候才能設置成功,否則設置失敗

image.png

設置成功會返回1,否則為0

可以起到分布式鎖的作用

鎖的意思是,拿著鎖去操作資源,我有了這把鎖就可以把資源給鎖上,只有我才可以用,其他人只能選擇等待。

image.png

如圖:

當我們處于分布式環境下想要操作同一個資源的時候,我們可以用同一個key然后setnx。誰set成功了,誰就獲得該鎖,然后可以獲取到資源,然后進行操作。

3.Hash,list,set操作

3.1 Hash操作

如下圖所示:

hmset:可以設置一個對象,屬性:值形式

hgetall key 可以獲取key 的所有值

hget key field :獲得單個屬性的值

hset key field :設置單個屬性的值

下面是演示:

image.png

image.png

3.2 List

list的基本指令:

lpush:把一個元素壓棧;

lrange:顯示指定范圍內的所有元素;如果上限大于List長度 ,則返回所有元素

lindex:返回某一個索引的值

lpop:從棧頂移除一個元素

rpop:從棧底移除一個元素

下面是演示:

image.png

3.3 Set

sadd:添加元素;

smembers:獲取set的元素

spop:移除元素;

srem:刪除一個元素;

sinter:找出兩個集合的交集

sdiff:找出兩個集合的差集

下面是演示:

image.png

3.4 SortedSet

sortedSet可以用來做排行榜,因為每個key后面都會一定的分數,根據分數來排序

zdd:添加元素

zrange:返回所有元素,已經按分數排序

有一個可以倒序輸出的指令,因此我們如果做排行榜的話,可以將銷量作為分數,商品的名字作為member

image.png

4.Java代碼操作Redis

1.首先引入jedis的包;

2.然后根據api去操作就好了。非常簡單,和我們操作命令行差不多。詳情參考一下網上的DEMO

5.Redis發布訂閱

要有訂閱者和發布者的存在

可以起到異步解耦的作用。比如:異步發短信這些和主要邏輯功能沒關系的,可以考慮用發布訂閱這些。

讓多個系統進行通信。

這里知道有這個概念就好了。因此我們平時在開發中,Redis這個發布訂閱功能用的不多,我們有專業的各種MQ幫我們處理。

6.Redis事務

6.1Redis事務的演示

multi:開啟事務

exec:執行事務

演示:

image.png

上面演示的是成功的情況。而失敗的情況一般包含兩種

語法失敗,不會執行操作

第二種情況,語法沒有出錯,兩個的key相同,會入隊列。執行事務的時候,會把臟數據放進去;如圖:

image.png

注意:Redis不是關系型數據庫,Redis沒有回滾的概念

6.2 watch的演示

watch:監控的key,在事務無法改變key

unwatch:撤銷監控

image.png

總結:

Redis事務非常雞肋,生產上幾乎不會用,面試會問問

7.Redis持久化

有兩種方式:一種是快照,一種是AOF

7.1快照(一般不會用):持久化到磁盤

我們在redis.conf文件中可以找到對應的配置

image.png

900 1:900s以內,有一個key改變就把一個Key放磁盤里面

300 10:300s以內,有10個key發生改變,會持久化到磁盤

以此類推

優點:

會把所有的數據持久化到磁盤

缺點:

效率低,影響性能和數據的浪費

如果要禁用的話直接把save禁止掉

7.2AOF(append only file)

只是把改變的添加到某一個磁盤里面,當下次Redis啟動的時候就加載這些改動的部分

image.png

把No改為Yes就可以啟用AOF模式

AOF也有三種模式,一般我們會用第二種模式

appendfsync always:只要添加一條就放到磁盤里面,效率低(一般不用)

appendfsync everysec:每秒中有多少改變都寫到磁盤(就算Redis掛了,有些數據丟失,影響不會那么大)

appendfsync no:多久同步一次,不是我們控制的,完全依賴于操作系統,Redis(一般不用)

AOF和快照模式的比較

存儲結構:

內容是redis通訊協議(RESP )格式的命令文本存儲。

比較:

1、aof文件比rdb更新頻率高,優先使用aof還原數據。

2、aof比rdb更安全也更大

3、快照性能比aof好

4、如果兩個都配了優先加載AOF。

7.3Redis內存

Redis是一個內存數據庫

Redis的容量依賴于內存的大小

Redis可以自己設定內存大小

如果我們自己設了內存大小的話,同時要設置內存策略;

Redis默認使用的是LRU算法

LRU算法:

長時間不用的數據(key),會從Redis中刪除

8.Redis面試理論

Redis集群出現之前如果實現高可用:

主從復制,主服務器要什么改變都復制到從服務器

缺點:

數據量會非常大,每一個從服務器數據量和主服務器一樣

3.0以后Redis有了集群的解決方案。

8.1Redis Cluster分區實現原理

槽(slot)概念

Redis Cluster中有一個16384長度的槽的概念,他們的編號為0、1、2、3……16382、16383。這個槽是一個虛擬的槽,并不是真正存在的。正常工作的時候,Redis Cluster中的每個Master節點都會負責一部分的槽,當有某個key被映射到某個Master負責的槽,那么這個Master負責為這個key提供服務,至于哪個Master節點負責哪個槽,這是可以由用戶指定的,也可以在初始化的時候自動生成(redis-trib.rb腳本)。這里值得一提的是,在Redis Cluster中,只有Master才擁有槽的所有權,如果是某個Master的slave,這個slave只負責槽的使用,但是沒有所有權。

image.png

這張圖的意思是:比如我們有一個客戶端請求了某個key發現不在某個節點上,該節點會找到這個key所在的節點,然后返回給客戶端,讓客戶端重新發起請求。

8.2Redis的線程模型

image.png

image.png

Redis是單線程,單進程的程序。一個指令來了,先放進隊列里面,先進先出;為什么單線程還這么快,因為是運行在內存里面,CPU操作內存速度是非常快的

總結

以上是生活随笔為你收集整理的java实现缓存中间件,Redis,分布式系统中不可少的缓存中间件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。