A. Redis 中使用 Lua 腳本
Redis 本身已經提供了豐富的命令,但是直接用來處理一些復雜業務時可能還不夠方便,會有一定的局限性。因此,在 Redis2.6 版本開始提供了對 Lua 腳本的支持,Lua 腳本的使用還是比較廣泛的,比如商品秒殺、分布式鎖等,使用 Lua 腳本可以帶來以下的好處:
為了讓例子更加的貼近實際應用,這里實現一個簡單版的分布式鎖。這里先用 Jedis 操作。
上邊詳細的介紹了分布式鎖的實現過程,以及可能出現的問題,最終,我們決定刪除鎖的操作使用 Lua 腳本實現,對應的腳本如下:
Lua 腳本中執行具體的 Redis 命令,需要使用 redis.call() 方法, KEYS 表示客戶端發起腳本執行命令時攜帶的 Redis key 的一個集合, ARGV 則是其它參數的一個集合,主意下標從1開始。結合我們的業務,這里的 KEYS[1] 則表示 lock , ARGV[1] 則是一個隨機字元串。整個腳本的含義就是,如果客戶端傳遞的 lock 的 value 和 Redis 中存儲的一致,就刪除 lock 。
Lua 腳本的語法還是比較簡單的,具體內容可以自行學習。
前邊的准備工作基本結束了,文章開始說過執行腳本有兩種途徑,下邊我們具體來看:
這里使用 jedis.eval() 發送腳本到 Redis 伺服器執行,後兩個參數分別是 key 的集合,以及 value 參數的集合。
先將腳本以文件形式放到 Redis 里,例如這樣:
然後通過如下命令讓 Redis 伺服器緩存腳本:
script load 命令會在 Redis 伺服器緩存 Lua 腳本,並且腳本內容經過 SHA-1 簽名演算法處理後,會返回腳本內容的 SHA1 校驗和的編碼,然後在端調用時,傳入編碼字元串作為參數,這樣 Redis 伺服器就會執行對應緩存的腳本了,就不用了每次發送具體的腳本內容了。
還有兩個比較有用的命令:
除了使用上邊的命令緩存腳本、生成腳本的 SHA1 校驗和的編碼,還可以使用 Jedis 實現,但最終的 SHA1 編碼內容是不同的:
實際的項目中,可能更多的會在 SpringBoot 項目中整合 Redis,此時執行 Lua 腳本的基本流程如下:
核心的類就是 DefaultRedisScript ,它實現了 RedisScript 介面。 execute() 方法最後一個參數是可變類型的,用來傳遞多個 value 參數。初次執行 execute() 方法時,其內部會自動緩存 Lua 腳本到 Redis 伺服器;同時每次執行腳本時會根據腳本內容自動計算出對應的 SHA1 校驗和的編碼,去匹配、執行緩存的腳本。
具體的 SHA1 校驗和的編碼,可以在 execute() 方法執行後,使用 redisScript.getSha1() 查看。使用 SpringBoot 方式 執行 Lua 腳本生成的 SHA1 校驗和的編碼和前邊直接使用 Jedis 生成的一致。
無論用那種方式在 Redis 中使用 Lua 腳本,其中的原理都是類似的。
B. 為什麼app第三方內嵌網頁不會自動更新腳本,老是讀緩存
IE總是彈出腳本錯誤提示窗口 出現此問題是因為該網頁的 HTML 源代碼不能使用客戶端腳本(如 Microsoft JScript 或 Visual Basic 腳本)正確工作。發生此問題可能是因為以下原因之一: " 網頁的 HTML 源代碼中有問題。 " 您的計算機或網路上阻止了活動腳本、ActiveX 控制項或 Java 小程序。Internet Explorer 或另外一種程序(如防病毒程序或防火牆)可以配置為阻止活動腳本、ActiveX 控制項或 Java 小程序 " 防病毒軟體配置為掃描您的「臨時 Internet 文件」或「已下載的程序文件」文件夾。 " 您計算機上的腳本引擎損壞或過時。 " 您計算機上的 Internet 相關文件夾損壞。 " 您的視頻卡驅動程序已損壞或者已過時。 " 您計算機上的 DirectX 組件損壞或過時。 注意:伺服器端腳本 -- 如 Active Server Pages (ASP) 中的 Visual Basic 腳本 -- 運行在 Web 伺服器上。因伺服器端腳本故障而發生的腳本錯誤不在 Internet Explorer 中生成錯誤消息,但也可能會創建一個不能正確顯示或工作的網頁。 一、錯誤特徵: 行: 247 字元: 2 錯誤: 拒絕訪問 代碼: 0 二、解決方案 1、清除一下IE瀏覽器的緩存,點IE上的工具——然後再選擇最下面的Internet選項,再點Internet刪除文件(記得勾上刪除所有離線內容),確定後再重新打開IE瀏覽器試試,同時請確認您使用的是IE6.0及以上版本。 2、您的網頁上清緩存,在網頁上選擇工具->Interner選項->刪除Cookies和刪除文件,然後再確定。 3、請您點擊IE瀏覽器中的「工具」,選擇「internet選項」,進入「安全」頁面,點擊「自定義級別」,將您的安全設置設為「低」。 4、清空一下IE瀏覽器的cookies文件,在IE瀏覽器中設置「禁止自動腳本更新」,並不要選擇「禁止運行ActiveX控制項」,然後再嘗試操作。 三、總結 1、錯誤類型不固定 行: 247 字元: 2 錯誤: 拒絕訪問 代碼: 0 數字部分都是可變的。 2、解決方案中的4條不用都改,我的錯誤只用了1、2條就解決了。 3、錯誤發生原因沒有做解釋,因為我也搞不懂,很復雜而且需要一定專業知識才能搞懂,寫在這也沒什麼必要,因為我們的目的是解決這一錯誤,能正常訪問網頁就OK了。 如果有頁面出現腳本錯誤,就把他另存,然後一點點刪除,如果當你刪除一段代碼後不再出現腳本錯誤,那就是那一段代碼出現問題,如果那段代碼不重要或是根本不需要,你就可以直接刪除;如果那段代碼很重要,那可以找段代碼代替。
C. 在web優化中,有一條是常用的js腳本,css樣式,常用圖片把他緩存起來圖片的文件名不都是隨機的嗎如何緩存
目前緩存都藉助雲存儲,你可以把常用的JS和CSS 上傳到類似七牛。UPYUN 這上面去。一般來說。如果你不是手機端的話,我建議你不用緩存,作用不大~訪問的話,可以在其URL加上後綴。。圖片可以直接利用插件上傳到這兩個雲存儲上
D. javascript腳本緩存怎麼解決
禁用客戶端緩存
HTM網頁
<META HTTP-EQUIV="pragma"
CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control"
CONTENT="no-cache, must-revalidate">
<META
HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57
GMT">
ASP網頁
<%
Response.Expires =
-1
Response.ExpiresAbsolute = Now() - 1
Response.cachecontrol = "no-cache"
%>
PHP網頁
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
JSP
response.setHeader("Pragma","No-Cache");
response.setHeader("Cache-Control","No-Cache");
response.setDateHeader("Expires", 0);
C#中禁止cache的方法!
Response.Buffer=true;
Response.ExpiresAbsolute=System.DateTime.Now.AddSeconds(-1);
Response.Expires=0;
Response.CacheControl="no-cache";
加入
<MEAT HTTP-EQUIV="Pragma"
CONTENT="no-cache">
不緩存。
一、Expires(期限)
說明:可以用於設定網頁的到期時間。一旦網頁過期,必須到伺服器上重新調閱。
用法:<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997
08:21:57 GMT">
注意:必須使用GMT的時間格式。
二、Pragma(cache模式)
說明:禁止瀏覽器從本地機的緩存中調閱頁面內容。
用法:<META
HTTP-EQUIV="Pragma" CONTENT="no-cache">
注意:這樣設定,訪問者將無法離線瀏覽。
三、腳本實現
<%
response.expires = 0
response.expiresabsolute = now()
- 1
response.addHeader "pragma","no-cache"
response.addHeader "cache-control","private"
Response.cachecontrol = "no-cache"
%>
IE瀏覽器訪問一個網頁的時候,首先會到臨時文件夾中去尋找和這個網頁相關的各個文件(如各種圖片)。如果在臨時文件夾中找到了一些文件,那麼瀏覽器就會使用這些臨時文件夾中的文件,而不去伺服器下載這些文件。
不幸的是,我的伺服器上的文件是經常變化的,如果IE優先考慮臨時文件夾中的文件,那麼就不能反映出我伺服器上的變化。
現在有兩個解決辦法,但都有缺陷:
一是使用網頁的自刷新,但是刷新速度快的話會有閃爍,不符合我其他方面的要求。
二是在IE設置中設成「每次訪問此頁時檢查」。此時IE不考慮臨時文件夾中的內容,直接從服務下載各個文件。但是這種辦法需要用戶進行設置,對用戶來說有點麻煩。而且這樣的設置會影響用戶訪問其他網站的速度。
E. 腳本是什麼意思了有點不懂是掛
類似於一種程序模擬人工操作。不用你自己操作
F. LR腳本編輯器里,什麼情況下要緩存瀏覽器的請求內容
性能測試中應該盡量避免命中緩存
拿緩存要比全流程請求更快得到響應
但是一個新用戶在實際中是沒有緩存可拿的
如果腳本去拿緩存
出來的結果肯定偏樂觀一些