後端開發之Redis篇 分布式會話

2021-10-03 19:24:44 字數 1941 閱讀 9465

會話session代表的是客戶端與伺服器的一次互動過程,這個過程可以是連續也可以是時斷時續。曾經在servlet時代(jsp),一旦使用者與服務端互動,伺服器tomcat就會為使用者建立乙個session,同時前段會有乙個jsessionid,每次互動都會攜帶。如此一來,伺服器只要在接到使用者請求時候,就可以拿到jsessonid,並根據這個id在記憶體中找到對應的會話session,當拿到session會話後,那麼我們就可以操作會話了。會話存活期間,我們就能認為使用者一直處於正在使用著**的狀態,一旦session過期是,那麼久可以認為使用者已經離開**,停止互動了。使用者的身份資訊,我們也是通過session來判斷的,在session中可以儲存不同使用者的資訊。

http請求時無狀態的,使用者想伺服器發起多個請求,伺服器並不會知道這多次請求都是來自同乙個使用者的,這個就是無狀態的。cookie的出現就是為了有狀態的記錄使用者。常見的,ios與伺服器互動,安卓與伺服器互動,他們都是用過發起http請求來呼叫介面資料的,每次及哦啊胡伺服器都不會拿到客戶端的狀態,但是我們可以通過手段去處理,比如每次使用者發起請求的時候攜帶乙個userid或者user-token,如此一來,就能讓伺服器分局使用者id或者token來獲得相應的資料。每個使用者的下一次請求都能被伺服器識別來自同乙個使用者。

tomcat中的會話,就是有狀態的,一旦使用者和伺服器互動,就有會話,會話儲存了使用者的資訊,這樣使用者就「有狀態」了,伺服器會和每個客戶端都保持這樣的一層關係,這個由容器來管理,這個session會話是儲存到記憶體空間中的,如此一來,當不同的使用者訪問伺服器,那麼久能通過會話知道誰是誰了。tomcat會話的出現也是為了讓http請求變得有狀態。如果使用者不在和伺服器互動,那麼會話超時則小時,結束了他的生命週期。

使用場景,一般在使用者註冊以及登入時為使用者建立乙個token,因為一般這都是使用者進入互動過程的第一步

public uservo convertuservo

(users user)

我們在controller包下建立乙個interceptor的子包,建立乙個類來定義我們的***

//下面省略了posthandler和aftercomplete兩個方法的內容,因為我們暫時用不上

}下面是配置類的內容,如果是使用springmvc的話,就直接寫乙個xml配置檔案

在controller包建立乙個config的子包,在裡面建立乙個webmvcconfig類

/**

* 這個類是要實現webmvcconfigurer介面的,裡面有很多方法,可以自行選擇,包括靜態資源的對映也是用他

* 因為***相應註解來自動注入容器,所以這裡用@bean來生成

* 在***新增器中用註冊器先呼叫這個bean方法生成

*/@configuration

public

class

webmvcconfig

implements

webmvcconfigurer

@override

public

void

addinterceptors

(interceptorregistry registry)

}

Redis分布式鎖,開發實戰

背景 專案的定時任務,出現重複執行的情況。由於解決時間非常緊急。打算用redis自帶的分布式鎖 setnx key value設定鍵的值,僅當鍵不存在時 redis官方文件setnx key value 將 key 的值設為 value 當且僅當 key 不存在。若給定的 key 已經存在,則set...

分布式快取Redis之bitmap setbit

本學習教程所有示例 見github 1 setbit redis 127.0.0.1 6379 setbit key name offset value 該命令用於對 key 所儲存的字串值,設定或清除指定偏移量上的位 bit 時間複雜度o 1 在redis中,儲存的字串都是以二進位制的形式存在的。...

分布式鎖實現之redis

利用redis設計分布式鎖主要用下面這三個命令 setnx setnx key val 當且僅當key不存在時,set乙個key為val的字串,返回1 若key存在,則什麼都不做,返回0。expire expire key timeout 為key設定乙個超時時間,單位為second,超過這個時間鎖...