redis session java獲取attribute_面試題:給我說說你能想到幾種分布式session實現?...

作者:yanglbme 來源:https://github.com/doocs/advanced-java/blob/master/docs/distributed-system/distributed-session.md

# 面試官心理分析

面試官問了你一堆 dubbo 是怎么玩兒的,你會玩兒 dubbo 就可以把單塊系統弄成分布式系統,然后分布式之后接踵而來的就是一堆問題,最大的問題就是分布式事務、接口冪等性、分布式鎖,還有最后一個就是分布式 session。

當然了,分布式系統中的問題何止這么一點,非常之多,復雜度很高,這里只是說一下常見的幾個問題,也是面試的時候常問的幾個。

# 面試題剖析

session 是啥?瀏覽器有個 cookie,在一段時間內這個 cookie 都存在,然后每次發請求過來都帶上一個特殊的 jsessionid cookie,就根據這個東西,在服務端可以維護一個對應的 session 域,里面可以放點數據。

一般的話只要你沒關掉瀏覽器,cookie 還在,那么對應的那個 session 就在,但是如果 cookie 沒了,session 也就沒了。常見于什么購物車之類的東西,還有登錄狀態保存之類的。

這個不多說了,懂 Java 的都該知道這個。

單塊系統的時候這么玩兒 session 沒問題,但是你要是分布式系統呢,那么多的服務,session 狀態在哪兒維護啊?

其實方法很多,但是常見常用的是以下幾種:

1、完全不用 session

使用 JWT Token 儲存用戶身份,然后再從數據庫或者 cache 中獲取其他的信息。這樣無論請求分配到哪個服務器都無所謂。

2、tomcat + redis

這個其實還挺方便的,就是使用 session 的代碼,跟以前一樣,還是基于 tomcat 原生的 session 支持即可,然后就是用一個叫做 Tomcat RedisSessionManager 的東西,讓所有我們部署的 tomcat 都將 session 數據存儲到 redis 即可。

在 tomcat 的配置文件中配置:

然后指定 redis 的 host 和 port 就 ok 了。

還可以用上面這種方式基于 redis 哨兵支持的 redis 高可用集群來保存 session 數據,都是 ok 的。

3、spring session + redis

上面所說的第二種方式會與 tomcat 容器重耦合,如果我要將 web 容器遷移成 jetty,難道還要重新把 jetty 都配置一遍?

因為上面那種 tomcat + redis 的方式好用,但是會嚴重依賴于web容器,不好將代碼移植到其他 web 容器上去,尤其是你要是換了技術棧咋整?比如換成了 spring cloud 或者是 spring boot 之類的呢?

所以現在比較好的還是基于 Java 一站式解決方案,也就是 spring。人家 spring 基本上承包了大部分我們需要使用的框架,spirng cloud 做微服務,spring boot 做腳手架,所以用 sping session 是一個很好的選擇。

在 pom.xml 中配置:

88bee5fadbf31503a9d113172c01ea61.png

在 spring 配置文件中配置:

在 web.xml 中配置:

springSessionRepositoryFilterorg.springframework.web.filter.DelegatingFilterProxyspringSessionRepositoryFilter/*

示例代碼:

@RestController@RequestMapping("/test")public class TestController { @RequestMapping("/putIntoSession") public String putIntoSession(HttpServletRequest request, String username) { request.getSession().setAttribute("name

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445961.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445961.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445961.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Projection投影

解釋一 Projection means choosing which columns (or expressions) the query shall return. Selection means which rows are to be returned. if the query is select a, b, c from foobar where x3;then “a, b, c” is the projection part, “where x3” the selecti…

FFmpeg源代碼簡單分析-解碼-avformat_find_stream_info()

參考鏈接 FFmpeg源代碼簡單分析:avformat_find_stream_info()_雷霄驊的博客-CSDN博客_avformat_find_stream_info avformat_find_stream_info() ?該函數可以讀取一部分視音頻數據并且獲得一些相關的信息avformat_find_stream_info()的聲明位于libavformat\avform…

Tail Recursion尾遞歸

什么是尾遞歸 Tail Recursion /te?l r??k??r?n/ In traditional recursion, the typical model is that you perform your recursive calls first, and then you take the return value of the recursive call and calculate the result. In this manner, you don’t g…

python遞歸算法案例教案_python教案

第五單元進階程序設計(總10課時)第一節選擇編程語言(1課時)一、教學目標1、了解程序設計語言和兩種翻譯方式;2、了解Python背景、功能、安裝,熟悉Python編程環境;3、編程初體驗。體驗一個小程序從建立、輸入、調試、運行、保存的全過程。掌握…

FFmpeg源代碼簡單分析-解碼-av_read_frame()

參考鏈接 ffmpeg 源代碼簡單分析 : av_read_frame()_雷霄驊的博客-CSDN博客_ffmpeg frame av_read_frame() ffmpeg中的av_read_frame()的作用是讀取碼流中的音頻若干幀或者視頻一幀。例如,解碼視頻的時候,每解碼一個視頻幀,需要…

數據庫 流量切分_私域流量之社群運營技巧,社群運營技巧解析

一、明白社群運營的目的1、社群的目的確立任何一個社群(組織)成立的時分,都是承載著一定的目的的,這個目的就像是北極星一樣,指引著我們的方向。確立運營目的的過程,也是在尋覓北極星的過程。社群運營屬于觸達用戶的一種方式&…

用Python在Tomcat成功啟動后自動打開瀏覽器訪問Web應用

前提條件 WindowsPython 2.7需設置CATALINA_HOME環境變量 放碼過來 # -*- coding: utf-8 -* import os import time import subprocesstomcatStartFilePath C:\\tomcat\\apache-tomcat-7.0.90-windows-x64\\apache-tomcat-7.0.90\\bin\\startup.bat browserPath C:\\Users…

FFmpeg源代碼簡單分析-解碼-avcodec_send_packet 和 avcodec_receive_frame 替代 avcodec_decode_video2

參考鏈接 ffmpeg 源代碼簡單分析 : avcodec_decode_video2()_雷霄驊的博客-CSDN博客_avcodec_decode_video2 avcodec_decode_video2 ffmpeg中的avcodec_decode_video2()的作用是解碼一幀視頻數據。輸入一個壓縮編碼的結構體AVPacket,輸出一個解碼后的結…

FFmpeg源代碼簡單分析-解碼-avformat_close_input()

參考鏈接 FFmpeg源代碼簡單分析:avformat_close_input()_雷霄驊的博客-CSDN博客_avformat_close_input avformat_close_input() 本文簡單分析FFmpeg的avformat_close_input()函數。該函數用于關閉一個AVFormatContext,一般情況下是和avformat_open_inp…

android 使用shell模擬觸屏_[Android]通過adb shell input上報命令模擬屏幕點擊事件【轉】...

常用的 input上報命令:input text 1234 實際向界面注入1234文字,有輸入框,能明顯看到效果input keyevent 4 鍵盤事件,4 為返回input tap 100 300 單擊觸屏事件 ,模擬點擊x100 y 300 位置input swipe 100 300 500 300 …

用Python連接MySQL并進行CRUD

Tag: MySQL, PyMySQL, Python 準備條件 Python 2.7MySQL 5.5安裝 PyMySQL pip install PyMySQL 放碼過來 創建一數據表 CREATE TABLE users (id int(11) NOT NULL AUTO_INCREMENT,email varchar(255) COLLATE utf8_bin NOT NULL,password varchar(255) COLLATE utf8_bin N…

python網絡爬蟲的方法有幾種_Python網絡爬蟲過程中5種網頁去重方法簡要介紹

一般的,我們想抓取一個網站所有的URL,首先通過起始URL,之后通過網絡爬蟲提取出該網頁中所有的URL鏈接,之后再對提取出來的每個URL進行爬取,提取出各個網頁中的新一輪URL,以此類推。整體的感覺就是自上而下進…

FFmpeg源代碼簡單分析-編碼-avformat_alloc_output_context2()

參考鏈接 FFmpeg源代碼簡單分析:avformat_alloc_output_context2()_雷霄驊的博客-CSDN博客_avformat_alloc_context avformat_alloc_output_context2() 在基于FFmpeg的視音頻編碼器程序中,該函數通常是第一個調用的函數(除了組件注冊函數av…

《深入理解JVM.2nd》筆記(一):走進Java

概述 Java技術體系 Java程序設計語言各種硬件平臺上的Java虛擬機Class文件格式Java API類庫來自商業機構和開源社區的第三方Java類庫 Java發展史 Java虛擬機發展史 展望Java技術的未來 模塊化 混合語言 多核并行 進一步豐富語法 64位虛擬機 實戰:自己編譯…

js監聽只讀文本框_js 動態控制 input 框 的只讀屬性

input 框的只讀屬性: readonly在頁面中直接添加為只讀時,可在input中直接添加 readonly"readonly",但是如果想通過點擊按鈕來改變的話,需要通過js(或jquery)來實現。最近一次使用這個,終于發現了以前寫這…

FFmpeg源代碼簡單分析-編碼-avformat_write_header()

參考鏈接 FFmpeg源代碼簡單分析:avformat_write_header()_雷霄驊的博客-CSDN博客_avformat_write_header avformat_write_header() FFmpeg寫文件用到的3個函數:avformat_write_header(),av_write_frame()以及av_write_trailer()其中av_writ…

《深入理解JVM.2nd》筆記(二):Java內存區域與內存溢出異常

文章目錄概述運行時數據區域程序計數器Java虛擬機棧本地方法棧Java堆方法區運行時常量池直接內存HotSpot虛擬機對象探秘對象的創建第一步第二步第三步第四步最后一腳對象的內存布局對象頭Header第一部分第二部分實例數據Instance對齊填充Padding對象的訪問定位句柄直接指針對象…

vue底部選擇器_Vue組件-極簡的地址選擇器

一、前言本文用Vue完成一個極簡的地點選擇器,我們接下來帶大家實現這個。當然其中也有一些值得學習與注意的地方。話不多說,我們先上demo圖。因為每個人的需要不一樣,我這邊就不在實現更多的功能,所以留有更大的空間供大家增刪改。…

FFmpeg源代碼簡單分析-編碼-avcodec_encode_video()已被send_frame 和 receive_packet替代

參考鏈接 FFmpeg源代碼簡單分析:avcodec_encode_video()_雷霄驊的博客-CSDN博客_avcodec_encode_video2 avcodec_encode_video() 該函數用于編碼一幀視頻數據。函數已被棄用參考鏈接:FFmpeg 新舊版本編碼 API 的區別_zouzhiheng的博客-CSDN博客 send_f…

《深入理解JVM.2nd》筆記(三):垃圾收集器與垃圾回收策略

文章目錄概述對象已死嗎引用計數算法可達性分析算法再談引用finalize():生存還是死亡回收方法區垃圾收集算法標記-清除算法復制算法標記-整理算法分代收集算法HotSpot的算法實現枚舉根結點安全點安全區域垃圾收集器SerialParNewParallel ScavengeSerial OldParallel…