對hibernate的新認識
摘要: 閱讀全文
posted @ 2008-01-30 11:14 船夫 閱讀(1955) | 評論 (7) | 編輯 收藏
愚人碼頭知恥而后勇,知不足而進
隨筆 - 33, 文章 - 1, 評論 - 26, 引用 - 0
|
轉(zhuǎn):提升JSP應(yīng)用程序的七大絕招
提升JSP應(yīng)用程序的七大絕招
你時常被客戶抱怨JSP頁面響應(yīng)速度很慢嗎?你想過當客戶訪問次數(shù)劇增時,你的WEB應(yīng)用能承受日益增加的訪 問量嗎?本文講述了調(diào)整JSP和servlet的一些非常實用的方法,它可使你的servlet和JSP頁面響應(yīng)更快,擴展性更強。而且在用戶數(shù)增加的情 況下,系統(tǒng)負載會呈現(xiàn)出平滑上長的趨勢。在本文中,我將通過一些實際例子和配置方法使得你的應(yīng)用程序的性能有出人意料的提升。其中,某些調(diào)優(yōu)技術(shù)是在你的 編程工作中實現(xiàn)的。而另一些技術(shù)是與應(yīng)用服務(wù)器的配置相關(guān)的。在本文中,我們將詳細地描述怎樣通過調(diào)整servlet和JSP頁面,來提高你的應(yīng)用程序的 總體性能。在閱讀本文之前,假設(shè)你有基本的servlet和JSP的知識。 方法一:在servlet的init()方法中緩存數(shù)據(jù) 當應(yīng)用服務(wù)器初始化servlet實例之后,為客戶端請求提供服務(wù)之前,它會調(diào)用這個servlet的init()方法。在一個servlet的生命周 期中,init()方法只會被調(diào)用一次。通過在init()方法中緩存一些靜態(tài)的數(shù)據(jù)或完成一些只需要執(zhí)行一次的、耗時的操作,就可大大地提高系統(tǒng)性能。 例如,通過在init()方法中建立一個JDBC連接池是一個最佳例子,假設(shè)我們是用jdbc2.0的DataSource接口來取得數(shù)據(jù)庫連接,在通 常的情況下,我們需要通過JNDI來取得具體的數(shù)據(jù)源。我們可以想象在一個具體的應(yīng)用中,如果每次SQL請求都要執(zhí)行一次JNDI查詢的話,那系統(tǒng)性能將 會急劇下降。解決方法是如下代碼,它通過緩存DataSource,使得下一次SQL調(diào)用時仍然可以繼續(xù)利用它: public class ControllerServlet extends HttpServlet { private javax.sql.DataSource testDS = null; public void init(ServletConfig config) throws ServletException { super.init(config); Context ctx = null; try { ctx = new InitialContext(); testDS = (javax.sql.DataSource)ctx.lookup("jdbc/testDS"); } catch(NamingException ne) { ne.printStackTrace(); } catch(Exception e) { e.printStackTrace(); } } public javax.sql.DataSource getTestDS() { return testDS; } ... ... } 方法 2:禁止servlet和JSP 自動重載(auto-reloading) Servlet/JSP提供了一個實用的技術(shù),即自動重載技術(shù),它為開發(fā)人員提供了一個好的開發(fā)環(huán)境,當你改變servlet和JSP頁面后而不必重啟 應(yīng)用服務(wù)器。然而,這種技術(shù)在產(chǎn)品運行階段對系統(tǒng)的資源是一個極大的損耗,因為它會給JSP引擎的類裝載器(classloader)帶來極大的負擔(dān)。因 此關(guān)閉自動重載功能對系統(tǒng)性能的提升是一個極大的幫助。 方法 3: 不要濫用HttpSession 在很多應(yīng) 用中,我們的程序需要保持客戶端的狀態(tài),以便頁面之間可以相互聯(lián)系。但不幸的是由于HTTP具有天生無狀態(tài)性,從而無法保存客戶端的狀態(tài)。因此一般的應(yīng)用 服務(wù)器都提供了session來保存客戶的狀態(tài)。在JSP應(yīng)用服務(wù)器中,是通過HttpSession對像來實現(xiàn)session的功能的,但在方便的同 時,它也給系統(tǒng)帶來了不小的負擔(dān)。因為每當你獲得或更新session時,系統(tǒng)者要對它進行費時的序列化操作。你可以通過對HttpSession的以下 幾種處理方式來提升系統(tǒng)的性能: ? 如果沒有必要,就應(yīng)該關(guān)閉JSP頁面中對HttpSession的缺省設(shè)置: 如果你沒有明確指定的話,每個JSP頁面都會缺省地創(chuàng)建一個HttpSession。如果你的JSP中不需要使用session的話,那可以通過如下的JSP頁面指示符來禁止它: <%@ page session="false"%> ? 不要在HttpSession中存放大的數(shù)據(jù)對像:如果你在HttpSession中存放大的數(shù)據(jù)對像的話,每當對它進行讀寫時,應(yīng)用服務(wù)器都將對其進行 序列化,從而增加了系統(tǒng)的額外負擔(dān)。你在HttpSession中存放的數(shù)據(jù)對像越大,那系統(tǒng)的性能就下降得越快。 ? 當你不需要HttpSession時,盡快地釋放它:當你不再需要session時,你可以通過調(diào)用HttpSession.invalidate()方法來釋放它。 ? 盡量將session的超時時間設(shè)得短一點:在JSP應(yīng)用服務(wù)器中,有一個缺省的session的超時時間。當客戶在這個時間之后沒有進行任何操作的話, 系統(tǒng)會將相關(guān)的session自動從內(nèi)存中釋放。超時時間設(shè)得越大,系統(tǒng)的性能就會越低,因此最好的方法就是盡量使得它的值保持在一個較低的水平。 方法 4: 將頁面輸出進行壓縮 壓縮是解決數(shù)據(jù)冗余的一個好的方法,特別是在網(wǎng)絡(luò)帶寬不夠發(fā)達的今天。有的瀏覽器支持gzip(GNU zip)進行來對HTML文件進行壓縮,這種方法可以戲劇性地減少HTML文件的下載時間。因此,如果你將servlet或JSP頁面生成的HTML頁面 進行壓縮的話,那用戶就會覺得頁面瀏覽速度會非常快。但不幸的是,不是所有的瀏覽器都支持gzip壓縮,但你可以通過在你的程序中檢查客戶的瀏覽器是否支 持它。下面就是關(guān)于這種方法實現(xiàn)的一個代碼片段: public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { OutputStream out = null String encoding = request.getHeader("Accept-Encoding"); if (encoding != null && encoding.indexOf("gzip") != -1) { request.setHeader("Content-Encoding" , "gzip"); out = new GZIPOutputStream(request.getOutputStream()); } else if (encoding != null && encoding.indexOf("compress") != -1) { request.setHeader("Content-Encoding" , "compress"); out = new ZIPOutputStream(request.getOutputStream()); } else { out = request.getOutputStream(); } ... ... } 方法 5: 使用線程池 應(yīng)用服務(wù)器缺省地為每個不同的客戶端請求創(chuàng)建一個線程進行處理,并為它們分派service()方法,當service()方法調(diào)用完成后,與之相應(yīng)的 線程也隨之撤消。由于創(chuàng)建和撤消線程會耗費一定的系統(tǒng)資源,這種缺省模式降低了系統(tǒng)的性能。但所幸的是我們可以通過創(chuàng)建一個線程池來改變這種狀況。另外, 我們還要為這個線程池設(shè)置一個最小線程數(shù)和一個最大線程數(shù)。在應(yīng)用服務(wù)器啟動時,它會創(chuàng)建數(shù)量等于最小線程數(shù)的一個線程池,當客戶有請求時,相應(yīng)地從池從 取出一個線程來進行處理,當處理完成后,再將線程重新放入到池中。如果池中的線程不夠地話,系統(tǒng)會自動地增加池中線程的數(shù)量,但總量不能超過最大線程數(shù)。 通過使用線程池,當客戶端請求急劇增加時,系統(tǒng)的負載就會呈現(xiàn)的平滑的上升曲線,從而提高的系統(tǒng)的可伸縮性。 方法 6: 選擇正確的頁面包含機制 在JSP中有兩種方法可以用來包含另一個頁面:1、使用include指示符(<%@ includee file=”test.jsp” %>)。2、使用jsp指示符(<jsp:includee page=”test.jsp” flush=”true”/>)。在實際中我發(fā)現(xiàn),如果使用第一種方法的話,可以使得系統(tǒng)性能更高。 方法 7:正確地確定javabean的生命周期 JSP的一個強大的地方就是對javabean的支持。通過在JSP頁面中使用<jsp:useBean>標簽,可以將javabean直接插入到一個JSP頁面中。它的使用方法如下: <jsp:useBean id="name" scope="page|request|session|application" class= "package.className" type="typeName"> </jsp:useBean> 其中scope屬性指出了這個bean的生命周期。缺省的生命周期為page。如果你沒有正確地選擇bean的生命周期的話,它將影響系統(tǒng)的性能。 舉例來說,如果你只想在一次請求中使用某個bean,但你卻將這個bean的生命周期設(shè)置成了session,那當這次請求結(jié)束后,這個bean將仍然 保留在內(nèi)存中,除非session超時或用戶關(guān)閉瀏覽器。這樣會耗費一定的內(nèi)存,并無謂的增加了JVM垃圾收集器的工作量。因此為bean設(shè)置正確的生命 周期,并在bean的使命結(jié)束后盡快地清理它們,會使用系統(tǒng)性能有一個提高 其它一些有用的方法 ? 在字符串連接操作中盡量不使用“+”操作符:在java編程中,我們常常使用“+”操作符來將幾個字符串連接起來,但你或許從來沒有想到過它居然會對系統(tǒng) 性能造成影響吧?由于字符串是常量,因此JVM會產(chǎn)生一些臨時的對像。你使用的“+”越多,生成的臨時對像就越多,這樣也會給系統(tǒng)性能帶來一些影響。解決 的方法是用StringBuffer對像來代替“+”操作符。 ? 避免使用System.out.println()方法:由于System.out.println()是一種同步調(diào)用,即在調(diào)用它時,磁盤I/O操作必 須等待它的完成,因此我們要盡量避免對它的調(diào)用。但我們在調(diào)試程序時它又是一個必不可少的方便工具,為了解決這個矛盾,我建議你最好使用Log4j工具 (http://Jakarta.apache.org ),它既可以方便調(diào)試,而不會產(chǎn)生System.out.println()這樣的方法。 ? ServletOutputStream 與 PrintWriter的權(quán)衡:使用PrintWriter可能會帶來一些小的開銷,因為它將所有的原始輸出都轉(zhuǎn)換為字符流來輸出,因此如果使用它來作為 頁面輸出的話,系統(tǒng)要負擔(dān)一個轉(zhuǎn)換過程。而使用ServletOutputStream作為頁面輸出的話就不存在一個問題,但它是以二進制進行輸出的。因 此在實際應(yīng)用中要權(quán)衡兩者的利弊。 總結(jié) 本文的目的是通過對servlet和JSP的一些調(diào)優(yōu)技術(shù)來極大地提高你 的應(yīng)用程序的性能,并因此提升整個J2EE應(yīng)用的性能。通過這些調(diào)優(yōu)技術(shù),你可以發(fā)現(xiàn)其實并不是某種技術(shù)平臺(比如J2EE和.NET之爭)決定了你的應(yīng) 用程序的性能,重要是你要對這種平臺有一個較為深入的了解,這樣你才能從根本上對自己的應(yīng)用程序做一個優(yōu)化! Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1448910 posted @ 2007-12-25 17:04 船夫 閱讀(232) | 評論 (0) | 編輯 收藏 JSP編譯過程很久以來,都知道JSP其實就是Servlet,今天心血來潮,想把里面的具體代碼看一遍,并記錄心得。
其核心方法為:一個編譯好的JSP類如下: public final class index_jsp extends HttpJspBase implements JspSourceDependent //上述類為index.jsp被編譯后得到的類 //HttpJspBase是extends HttpServlet的一個類 //JspSourceDependent是一個接口,只聲明了一個方法、、getDependants(),返回當前page所依賴的文件的名稱,文件包括以下幾種 //1) files that are included by page directives //2) files that are included by include-prelude and include-coda in jsp:config //3) files that are tag files and referenced //4) TLDs referenced public void _jspService(HttpServletRequest request, HttpServletResponse response)
該方法重載HttpJspBase中的_jspService方法,進行頁面解析,包括對scriptlet的加載,html的生成,自定義Tag的解析等等throws IOException, ServletException{ ![]() ![]() ![]() ![]() ![]() ![]() } HttpJspBase的service再對_jspService再進行調(diào)用,最終生成HTML頁面 posted @ 2007-12-18 12:06 船夫 閱讀(1911) | 評論 (1) | 編輯 收藏 Annotation初步了解
今天在看Tapestry代碼的時候,突然想了解一下annotation到底是干什么的,有什么好處?花了3個小時的時間,從JDK API開始,大致了解了一下。
annotation實際上就是給一些特定的類和其屬性,方法等加上一些注釋(annotation),這些注釋是以屬性name,value進行設(shè)置的,這些屬性在Annotation Class中以方法的形式存在,如下: @Documented //是否需要產(chǎn)生javadoc
以上為自定義的annotation,是應(yīng)用在成員變量上的,使用該annotation情況如下@Target(java.lang.annotation.ElementType.METHOD) //應(yīng)用目標,這里是應(yīng)用到field屬性上面 @Retention(RetentionPolicy.RUNTIME) //該策略指明該注釋會被加載到j(luò)vm中,即在運行時,我們可以得到該注釋的內(nèi)容,另外兩個策略,SOURCE, CLASS都不會加載到j(luò)vm中 public @interface TestAnnoation { String value(); //屬性value String time(); //屬性time } public class Test {
@TestAnnoation(time="12:30",value="20") public String test(){ System.out.println("test!"); return null; }; } 可以使用java的反射來進行獲取,通過: Class cls = Class.forName("Test");
cls.isAnnotationPresent(AnnotationClass.class);//判斷是否存在annotation TestAnnotation ta = (TestAnnotation)cls.getAnnotation(AnnotationClass.class);//獲得AnnotationClass實例,后調(diào)用這個實例可以獲得在AnnotationClass中定義的一些屬性 System.out.println(ta.time()); //輸出注釋time內(nèi)容 System.out.println(ta.value()); //輸出注釋value內(nèi)容 我個人認為annotation的好處是將一些配置直接寫在代碼上,很直觀;以前在使用hibernate的時候,PO對象和對應(yīng)的mapping xml是分開的,不夠直觀,若是使用annotation就會很直觀的看出這個對象的映射屬性以及它的一些特殊屬性(如lazy=true)之類的,在JPA中就把這種配置方式換成了annotation。 在JE上有很多關(guān)于使用annotation和xml的爭論,我認為在小規(guī)模使用上可以使用annotation,就像JPA這種,每個PO上面都需要進行配置,即使使用XML也不能簡化;而在大規(guī)模使用,如spring所維護的一些service的事務(wù)配置上避免使用annotation,因為每個service類中都需要配置,而使用AOP根據(jù)XML配置可以一下就搞定。 關(guān)于ElementType的其他屬性: TYPE(類型), FIELD(屬性), METHOD(方法), PARAMETER(參數(shù)), CONSTRUCTOR(構(gòu)造函數(shù)),LOCAL_VARIABLE(局部變量), ANNOTATION_TYPE,PACKAGE(包),其中的TYPE(類型)是指可以用在Class,Interface,Enum和 Annotation類型上. posted @ 2007-12-17 16:33 船夫 閱讀(325) | 評論 (1) | 編輯 收藏 禁食了,腎結(jié)石患者還能吃什么?
當腎結(jié)石、膀胱結(jié)石發(fā)生以后,患者在劇烈的疼痛中常向醫(yī)生討教:腎臟、尿道里那來的石頭呢?手術(shù)之后要怎樣才能預(yù)防它復(fù)發(fā)呢?
腎結(jié)石的形成,主要原因就是飲食。它是由飲食中可形成結(jié)石的有關(guān)成分攝入過多引起的。再細一點解釋是: 草酸積存過多。體內(nèi)草酸的大量積存,是導(dǎo)致腎尿結(jié)石的 因素之一。如菠菜、豆類、葡萄、可可、茶葉、桔子、番茄、土豆、李子、竹筍等這些人們普遍愛吃的東西,正是含草酸較高的食物。醫(yī)生通過研究發(fā)現(xiàn):200克 菠菜中,含草酸725.6毫克,如果一人一次將200克菠菜全部吃掉,食后8小時,檢查尿中草酸排泄量為20-25毫克,相當于正常人24小時排出的草酸 平均總量。 嘌呤代謝失常。動物內(nèi)臟、海產(chǎn)食品、花生、豆角、菠菜等,均含有較多的嘌呤成分。嘌呤進入體內(nèi)后,要進行新陳代謝,它代謝的最終產(chǎn)物是尿酸。尿酸可促使尿中草酸鹽沉淀。如果,一次過多地食用了含嘌呤豐富的食物,嘌呤的代謝又失常,草酸鹽便在尿中沉積而形成尿結(jié)石。 脂肪攝取太多。各種動物的肉類,尤其是肥豬肉,都是脂肪多的食品。多吃了體內(nèi)脂肪必然增高,脂肪會減少腸道中可結(jié)合的鈣,因而引起對草酸鹽的吸收增多,如果一旦出現(xiàn)排泄功能故障,如出汗多、喝水少,尿量少,腎結(jié)石很可能就在這種情況下形成。所以,醫(yī)生們常講,為了預(yù)防得結(jié)石病,熱天要多喝點水,吃了油水多的食物時,也要多喝點水,以促進排尿暢通,稀釋尿液成分,就減少了得結(jié)石的危險。 糖分增高。糖是人體的重要養(yǎng)分,要經(jīng)常適量增補,但一下子增加太多,尤其是乳糖,也會使結(jié)石形成創(chuàng)造條件。專家們發(fā)現(xiàn):不論正常人或結(jié)石病人,在食用100克蔗糖后,過2小時去檢查他們的尿,發(fā)現(xiàn)尿中的鈣和草酸濃度均上升,若是服用乳糖,它更能促進鈣的吸收,更可能導(dǎo)致草酸鈣在體內(nèi)的積存而形成尿結(jié)石。 蛋白質(zhì)過量。對腎結(jié)石成分進行化驗分析,發(fā)現(xiàn)結(jié)石中的草酸鈣占87.5%。這么大比重的草酸鈣的來源就是因為蛋白質(zhì)里除含有草酸的原料——甘氨酸、羥脯氨酸之外,蛋白質(zhì)還能促進腸道功能對鈣的吸收。如果經(jīng)常過量食用高蛋白質(zhì)的食物,便使腎臟和尿中的鈣、草酸、尿酸的成分普遍增高。如果不能及時有效地通過腎臟功能把多余的鈣、草酸、尿酸排出體外,這樣,得腎臟結(jié)石、輸尿管結(jié)石癥的條件就形成了。當今世界經(jīng)濟發(fā)達國家腎結(jié)石發(fā)病率增高的主要原因就是如此。 從以上幾種易形成腎結(jié)石的因素來看,要預(yù)防腎結(jié)石病 的發(fā)生,就必須改變只顧單求一種營養(yǎng)和追求營養(yǎng)過甚的觀念。這就是說,在人類的日常飲食中,不能因為某種食物好吃、營養(yǎng)價值高,就一味地只顧去吃這種食 物。必須注意食物的搭配,各種食物都適量進食,即使是檢查出身體缺乏某種營養(yǎng)素需要某種食物來補充時,也不宜一次大量進食,因為人體的消化、吸收功能是有限的。消化、吸收不了的養(yǎng)分就要通過排泄器官排泄出去,這樣也會增加泌尿系統(tǒng)的負擔(dān),即便不患腎結(jié)石病,也對健康不利。特別是當檢查出確認是腎結(jié)石癥時,在患病期間,要限制病人吃那些易促使結(jié)石形成的食物。 腎結(jié)石是尿石癥的一種,多在炎熱的夏天形成,因為夏天大量出汗,甚至體內(nèi)脫水,使排尿減少,再加之夏季暴露于陽光下時間長,紫外線照射皮膚有助于體內(nèi)維生素D和維生素A合成增多,維生素D和維生素A可促進小腸吸收鈣離子,尿液中排泄鈣增多,尿內(nèi)結(jié)石物質(zhì)易產(chǎn)生結(jié)晶核,從而形成結(jié)石。冬季天氣寒冷,人的尿量增多,已形成的小結(jié)石被尿液沖刷,向下移動,此時引起腎絞痛癥狀。所以,腎結(jié)石常為“夏季形成冬季發(fā)病”。 人們的飲食品種是多樣的,人體新陳代謝是復(fù)雜的,所以腎結(jié)石的成分也是多樣的。常見結(jié)石按成分可分為五種:一草酸鈣結(jié)石:最為常見,占腎結(jié)石的80以上,在酸性或中性尿中形成,發(fā)病多為青壯年,以男性多見。二磷酸鈣結(jié)石:占結(jié)石的6-9,在堿性尿中形成,也以男性青壯年多發(fā)。三尿酸結(jié)石:占結(jié)石的6,在酸性尿中形成,當尿PH值大于6.7時結(jié)石溶解,以男性多見。四磷酸鎂胺結(jié)石:占結(jié)石的10,在堿性尿中形成,尿PH值小于7.2時結(jié)石溶解,以女性多見。五胱氨酸結(jié)石:少見,約占結(jié)石的1-2,在酸性尿中形成,尿PH值大于7.0時結(jié)石溶解。 大量飲水對所有成分尿石都有防治作用。在炎熱的夏天,每日尿量少于1200毫升時,尿石生長的危險性顯著增大。如能使每日飲水量在2000-4000毫升,這樣可維持每日尿量在2000毫升以上。磁化水對防治草酸鈣結(jié)石更有效,可將全日飲水量分別于晨起、餐間、睡前給予。清晨飲水量可達500-1000毫升。為了保持夜間尿量,睡前飲水500毫升,睡眠中起床排尿后再飲水300-500毫升,余下水分別于餐間飲服。大量飲水可促使小的結(jié)石排出,稀釋尿液可防止尿石結(jié)晶形成,并能延緩結(jié)石增長速度。 1985年國外學(xué)者Vehlensieck認為,多飲水和飲食療法可使2/3復(fù)發(fā)結(jié)石病人不再生新結(jié)石。下面介紹幾種腎結(jié)石的飲食療法。 ⑴草酸鈣結(jié)石:宜低鈣及低草酸飲食。少食牛奶及乳制品、豆制品、肉類、動物內(nèi)臟(如肝、心臟、腎、腸等),還有巧克力、濃茶、芝麻醬、蛋黃、香菇、菠菜、蝦皮、蘿卜、可可、芹菜、土豆等。近年來發(fā)現(xiàn)食物中纖維素可減少尿鈣的形成,如麥麩食品中的麥麩面包、米糠也有同樣作用,對復(fù)發(fā)性高鈣尿結(jié)石有效,維生素B1、維生素B6缺乏使尿草酸增多,應(yīng)增加富含此類維生素的食物,如谷物、干果、硬果等。 ⑵磷酸鈣結(jié)石及磷酸鎂銨結(jié)石:其低鈣飲食同草酸鈣結(jié)石相同。在低磷食物中,宜少食肉類、魚類及骨頭湯。 ⑶尿結(jié)石: 應(yīng)限制蛋白質(zhì)的攝入量,每日蛋白質(zhì)的總攝入量應(yīng)在48-80克(0.8-1.0克/公斤/日)之間。一般帶葉的蔬菜每市斤約含10克蛋白質(zhì)、瘦肉類每50 克約含蛋白質(zhì)10克、谷類每市斤含蛋白質(zhì)35-60克。要增加新鮮蔬菜和水果的食量。蔬菜和水果含維生素B1及維生素C,它們在體內(nèi)最后代謝產(chǎn)物是堿性 的,尿酸在堿性尿內(nèi)易于溶解,故有利于治療。常規(guī)治療:每隔1-2日用一次清涼飲食(生水果、果汁及生菜),至少每周1次清涼飲食。少食或忌用肉類、動物 內(nèi)臟、肉湯、肉汁、沙丁魚、蟹、菠菜、濃茶、咖啡,烈性的香料及調(diào)味品也宜少用。 現(xiàn)實生活中很多疾病的發(fā)生和日常飲食是密切相關(guān)的,如果能做到起居有時,飲食有節(jié),甚至大部分癌癥也可能避免。現(xiàn)在就腎結(jié)石病這一頑癥來提醒大家如何用飲食來預(yù)防,或使已經(jīng)患了腎結(jié)石者,結(jié)石增大的速度減慢,甚至縮小、溶解而排出體外。 (一)多飲白開水 多飲水使尿液得到稀釋,鈣離子和草酸根的濃度就會降低,形成不了草酸鈣結(jié)石。研究表明,增加50%的尿量,可使腎結(jié)石發(fā)病率下降86%。 (二)合理補鈣,尤其飲食上補鈣 腎結(jié)石患者往往“談鈣色變”,錯誤地認為腎結(jié)石的元兇是鈣,其實不然,腎結(jié)石患者也需要補鈣。目前醫(yī)學(xué)界從兩個不同的角度來解釋,腎結(jié)石患者為什么要補鈣。 第一是補充鈣能與胃腸道中蔬菜含有的草酸結(jié)合成不溶性的草酸鈣,隨糞便排出體外,減少了部分被腸胃吸收和經(jīng)腎臟排出體外的草酸,從而減少了形成腎結(jié)石的幾率。 第二是日本學(xué)者提出的“酸堿平衡學(xué)說”。即血液呈酸性時,結(jié)石容易形成。呈堿性時,抑制結(jié)石形成。缺鈣時血液偏酸性,合理補鈣,血液偏堿,這樣反而有利于抑制結(jié)石形成。 (三)限量攝入糖類 美國科學(xué)家最新一項研究結(jié)果表明,高糖食品的攝入,可以使患腎結(jié)石的機會增加,因此,要注意少吃甜食。 (四)少吃草酸鹽含量高的食物 含草酸鹽高的食物有番茄、菠菜、草莓、甜菜、巧克力等,過高的草酸鹽攝入也是導(dǎo)致腎結(jié)石的主要原因之一。 (五)少吃豆制品 大豆食品含草酸鹽和磷酸鹽都高,能同腎臟中的鈣融合,形成結(jié)石。 (六)睡前慎喝牛奶 睡眠不好的人,睡前喝杯牛奶有助于睡眠。但在睡眠后,尿量減少、濃縮,尿中各種有形物質(zhì)增加。而飲牛奶后2~3小時,正是鈣通過腎臟排泄的高峰。鈣通過腎臟在短時間內(nèi)驟然增多,容易形成結(jié)石。因此腎結(jié)石患者,睡前就不應(yīng)喝含鈣高的牛奶。 (七)勿過量服用魚肝油 魚肝油富含維生素D,有促進腸膜對鈣磷吸收的功能,驟然增加尿液中鈣磷的排泄,勢必產(chǎn)生沉淀,容易形成結(jié)石。 (八)多食黑木耳 黑木耳中富含多種礦物質(zhì)和微量元素,能對各種結(jié)石產(chǎn)生強烈的化學(xué)反應(yīng),使結(jié)石剝脫、分化、溶解,排出體外。 posted @ 2007-12-17 12:04 船夫 閱讀(1402) | 評論 (0) | 編輯 收藏 |
||