溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Redis中字符串的具體使用方法

發(fā)布時(shí)間:2021-08-07 16:10:38 來源:億速云 閱讀:126 作者:chen 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“Redis中字符串的具體使用方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Redis中字符串的具體使用方法”吧!

使用場景

一. 緩存功能

我們做開發(fā)時(shí),都知道,項(xiàng)目中的所有的數(shù)據(jù)都是從存儲層獲取的,也就是數(shù)據(jù)庫中。但如果所有的請求都從數(shù)據(jù)庫中獲取,會導(dǎo)致系統(tǒng)有很大的壓力,因?yàn)橹苯訌臄?shù)據(jù)庫中獲取數(shù)據(jù),會涉及到數(shù)據(jù)庫中讀寫操作,而數(shù)據(jù)庫中讀寫操作是會耗費(fèi)系統(tǒng)資源的。所以對于大部分公司來說,系統(tǒng)的架構(gòu)中都會添加一個(gè)緩存層,大部分的請求數(shù)據(jù)都會先從緩存層中獲取,如果緩存層中沒有查到數(shù)據(jù),在從存儲層獲取,也就是數(shù)據(jù)庫中。然后在將存儲層獲取到的數(shù)據(jù)同步到緩存層中。這樣一來,對于大部分請求來說都會從緩存層中查找到,這樣就大大降低了存儲層的壓力。而緩存層Redis是一種解決方案之一。下面我們簡單模擬一下用戶請求數(shù)據(jù)的過程。

Redis中字符串的具體使用方法

二. 計(jì)數(shù)

計(jì)數(shù)功能在很多網(wǎng)站中都比較常見,最典型的就是頁面的播放量。對于一個(gè)視頻網(wǎng)站來說,由于訪問的人數(shù)較多,如果每次有人訪問,都直接修改數(shù)據(jù)庫的話,那這種大并發(fā)量并且頻繁的修改數(shù)據(jù)庫的話,一定會對數(shù)據(jù)庫造成較大的壓力,極端情況下可能會導(dǎo)致數(shù)據(jù)庫宕機(jī)等,并且由于訪問量較大,我們在開發(fā)時(shí),還要考慮多線程的兼容問題,否則會造成數(shù)據(jù)的不準(zhǔn)確。除此之外,由于訪問量很大,也會造成每個(gè)用戶請求返回的時(shí)間變長,用戶訪問網(wǎng)站時(shí),可能會顯示遲鈍等。而用Redis則不會出現(xiàn)這種情況。首先Redis是將數(shù)據(jù)保存到內(nèi)存中的,相比數(shù)據(jù)庫的磁盤IO操作,性能提升較明顯。其次Redis是單線程架構(gòu),我們不用為大并發(fā),而做特殊的多線程處理。其三就是Redis提供了很多支持原子性操作的命令,我們可以直接使用,而不用考慮相關(guān)細(xì)節(jié)。所以用Redis來實(shí)現(xiàn)網(wǎng)站或者其它業(yè)務(wù)的計(jì)數(shù)功能是比較合適的。但有一點(diǎn)要特別注意,我們將計(jì)數(shù)的數(shù)據(jù)保存在Redis中是為了不頻繁的執(zhí)行數(shù)據(jù)庫的修改操作。而數(shù)據(jù)的最終結(jié)果還是要保存在數(shù)據(jù)庫中的(雖然Redis有持久化功能)。所以我們在實(shí)際的開發(fā)中,可以選擇某個(gè)時(shí)間點(diǎn),在將Redis中的計(jì)數(shù)數(shù)據(jù)同步到數(shù)據(jù)庫中,大多數(shù)都會采用定時(shí)調(diào)度的方式,來同步數(shù)據(jù),當(dāng)然也可以考慮其它的計(jì)數(shù)實(shí)現(xiàn)。


三. 共享Session

我們知道在項(xiàng)目開發(fā)中Session中保存著用戶的登錄信息,當(dāng)用戶訪問系統(tǒng)時(shí)首先判斷該用戶的Session中有沒有該用戶的信息,當(dāng)然還要判斷是否超過了Session失效時(shí)間。如果有則認(rèn)為用戶已經(jīng)成功登錄過,所以允許訪問,反之,則提示用戶登錄,或者直接跳轉(zhuǎn)到登錄。在單一的架構(gòu)中,上述場景是沒有問題的,但是在分布式架構(gòu)中上述場景就有問題了。我們知道Session是保存在服務(wù)端的,也就是說,我們的服務(wù)端部署在哪臺機(jī)器上,Session就保存在哪臺機(jī)器上。而分布式的方式是將服務(wù)端部署到了多臺機(jī)器上。這就會導(dǎo)致一個(gè)問題,雖然用戶登錄成功了,但是由于負(fù)載均衡等原因,給用戶提供服務(wù)的服務(wù)端和給用戶登錄的服務(wù)端,不在一臺機(jī)器上,這樣就會出現(xiàn),雖然用戶登錄成功了,但是我們還是會提示用戶沒有登錄。因?yàn)槌擞脩舻卿浤桥_機(jī)器有用戶Session信息外,其它的機(jī)器沒有用戶的Session信息,所以會出現(xiàn)上述情況。也就是如下圖所示的那樣:

Redis中字符串的具體使用方法

既然上述的場景在分布式中有問題,那我就要想辦法解決它。解決的方式有很多種,在這里,只介紹一種解決方案,也就是采用Redis解決。當(dāng)用戶登錄成功時(shí),我們不在將Session信息保存到本地的服務(wù)器中,而是將它保存到Redis中。這樣無論哪個(gè)服務(wù)器先登錄成功,對于用戶的Session信息只有一份,也就是保存到Redis中的那一份。這樣,當(dāng)其它服務(wù)器判斷用戶是否登錄時(shí),都從Redis中獲取Session信息。如果Redis中有用戶的Session信息,而用戶一定登錄成功過。否則,而用戶未登錄過,或者登錄失敗。這樣就解決了,分布式用戶登錄的問題。也就是如下圖所示:

Redis中字符串的具體使用方法

上述這些都是Redis中字符串類型的使用場景,但在實(shí)際開發(fā)中使用場景遠(yuǎn)遠(yuǎn)不只這些。只要我們熟練的使用Redis中字符串類型的相關(guān)命令,就可以解決我們開發(fā)中很多復(fù)雜的問題。

到此,相信大家對“Redis中字符串的具體使用方法”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI