Java開發技術大雜燴(二)之(redis、mysql、http、shiro、threadlocal)

###前言linux

工做越久發現本身越麻瓜。感受只有天天積累一點,纔不會以爲空虛。ajax

###redis-benchmark用法 redis-benchmark是用於給redis進行壓測的。 1.100個併發鏈接,10000個請求redis

redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 10000spring

2.存取大小爲100字節的數據包數據庫

redis-benchmark -h 127.0.0.1 -p 6379 -q -d 100windows

3.只測試某些操做的性能後端

redis-benchmark -t set,get,lpush -q -n 10000瀏覽器

4.只測試某些數據存取的性能緩存

redis-benchmark -n 10000 -q script load "redis.call('set','cmazxiaoma','123')"服務器


###jmeter命令行使用 1.在windows上錄好jmx 2.在linux上進行命令行操做

sh jmeter.sh -n -t xxx.jmx -l result.jtl

3.把result.jtl導入到windows上的jmeter


###合理更新緩存 通常咱們正確使用Redis的策略是先更新數據庫,再刪除緩存。在這種狀況下,咱們能夠考慮出髒數據的場景:有一個讀操做,可是沒有命中緩存,而後就到數據庫取數據。此時正好來了一個寫操做,讓緩存失效,而後以前的那個讀操做再把老數據放到緩存中,因此產生了髒數據。

可是這種場景出現的機率很低,由於這個條件須要發如今讀操做時緩存須要失效,並且併發着有一個寫操做。而實際上數據庫的寫操做會比讀操做慢的多,並且要鎖表,而讀操做必需要在寫操做以前進行數據庫操做,並且還要晚於寫操做更新緩存。


###Linux命令 1.查看linux服務器CPU核數

cat /proc/cpuinfo|grep processor

2.給腳本賦權限,chmod是change the permissions mode of file。u表明全部者,x表明執行權限,+表示增長權限。

chmod n+x *.sh

3.查看系統當前可用內存

cat /proc/meminfo

###Java編碼 1.Java一概採用Unicode編碼方式,每一個字符不管中文仍是英文字符都佔有2個字節。 2.Java虛擬機中一般使用UTF-16的方式來保存一個字符。

###MySQL 1.咱們查看會話等待時間,全局等待時間。特別提醒:時間的大小不能隨便設置,時間過長致使過多的connection sleep,佔用較多系統資源。從業務出發,結合查詢的耗時和業務吞吐量。

show global variables like 'wait_timeout' show session variables like '%wait%'

2.建惟一索引

alter table order_info add unique key u_idx_user_goods(user_id,goods_id)

###Http狀態碼 當咱們先後端分離 + 頁面靜態化(htm + ajax)去作商品詳情頁時,請求會返回304。304狀態碼:若是客戶端發送了一個帶條件的GET請求且該請求已被容許,而文檔的內容並無改變,則服務器應返回這個304狀態。對於商品詳情頁而言,對數據的及時性沒有那麼的高,應該考慮將界面緩存到用戶的瀏覽器中。在application-dev.properties中j進行以下配置。

spring.resources.chain.cache=true spring.resources.chain.enabled=true

###Ajax 當咱們發送Ajax的請求時,要判斷readystate=4和status=200才能進行下一步。那麼readystate又分爲哪幾步呢。

0 - 未初始化,尚未建立對象。 1 - 已打開,對象已經建立而且已初始化,但還未調用send方法。 2 - 已發送,已經調用send方法,但對象等待狀態碼和響應頭返回。 3 - 正在接收,已經接收到部分數據,但還不能調用該對象的屬性和方法,由於狀態碼和響應頭不完整。 4 - 已加載完,全部數據接收完畢。


###Shiro Shiro的Subject對象是由SecurityManager、HttpRequest等信息建立,而後把Subject綁定到當前線程(servlet線程)。SecurityUtils的getSubject方法是從當前線程中得到到Subject對象的。


###ThreadLocal ThreadLocal自己不存儲值,每個Thread維護着一個ThreadLocalMap,ThreadLocalMap中的key就是ThreadLocal實例自己,value是其須要存儲的Object對象。

ThreadLocalMap使用ThreadLocal的弱引用做爲其key,若是一個ThreadLocal沒有外部強引用去引用它,那麼系統GC的時候,這個ThreadLocal會被回收。GC後,ThreadLocal會出key爲null的Entry,咱們沒法訪問這些key爲null的Entry中的value。若是當前線程遲遲不結束的話,這樣key爲null的Entry的value就會造成一條引用鏈:Thread Ref -> Thread -> ThreadLocalMap -> Entry -> value,最終形成內存泄漏。


###尾言

腦子很差使,就多背多積累吧。

相關文章
相關標籤/搜索