精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

調整程序架構的思維 記改進程序緩存的經歷

開發 架構
寫程序超過10年的企業內部管理系統,今年開始總算是徹底走向web網絡編程了,但是由于以前的一些老的思想還沒徹底拋棄,導致寫程序的思維有時候還有一些老舊。下面從一些思維的轉變開始談起。

實際情況:

1:當公司的網站訪問量達到每天幾十萬IP時,網站服務器的壓力就非常大,一個非常簡單的程序,相鄰的2個sql語句,在服務器繁忙時,可能會過3-5分鐘才能運行完畢,甚至更長時間。服務器的硬件配置也已經足夠高了,這時候幾乎無法靠平常的數據庫的讀寫,數據庫的優化來提高程序的性能的。

2:硬盤的轉速是有限的,當數據庫量已經很大時,數據庫讀取數據也耗費很多時間。而且加硬盤相對比加內存條更復雜一些。

3:當數據庫的索引優化,分區優化都已經用完了,數據庫的結構也不能隨便修改時,靠數據庫優化的就遇到了瓶頸了。

4:現在內存都比較便宜,服務器上把能插內存條的地方都可以插滿了,但是系統往往不會用掉所有的內存,內存空間還是可以有富足。

5:雖然也可以用很多第3方組件來達到優化的目的,但是需要有學習成本,有采購成本,再有后期的維護成本,服務器的性能同樣也是增加壓力。

6:目前服務器的壓力已經快崩潰了,也比較難提升性能時,再有比較復雜的權限計算,每刷新一個頁面時,還判斷10次8次以上操作權限項目,需要更多的I/O時,很可能系統就真的徹底崩潰了。

7:當然我們可以在另外購買服務器,把程序的壓力進行分擔,但是我們假設不購買硬件了,數據庫也必須需要用同一個,從同一個服務器上的數據庫需要讀取數據。

在上面的程序環境下,就是老頑固也需要轉變思維了。

1:老頑固都比較難轉變思想:

因為事實擺在眼前,就是老頑固也必須接納緩存的做法了,雖然緩存有時候很折磨人,但是不靠緩存已經很難解決問題了。雖然以前有很多人給我過這樣的建議,都沒放在心上。

2:程序的及時性思維的轉變:

以前寫程序都強調,數據設置發生了變化程序能馬上顯示出來效果,例如修改了某個人的權限設置后,馬上就生效了。其實有時候沒必要那么馬上生效。有必要時刷新一下緩存,若沒必要用戶下次登錄時就生效了,頂多若有問題用戶再登錄一次就可以了,權限設置又不是每時每刻都在設置的,很多時候設置好了,半年一年都不用設置,沒必要過分強調實時性。

其實程序員都有過度設計的問題,用戶權限方面,我也的確是想的有些過度了,其實稍微放寬一下,也能滿足正常的日常使用的,頂多加個刷新緩存的功能,若有必要馬上見效就馬上刷洗一下緩存就可以了。

3:在不提高,就倍很多年輕人徹底超越了:

奔35了,體力腦力都明顯大幅下降,明顯感覺到身邊的年輕人又聰明又能干,這時候自己再不提高,很容易就徹底走下坡路了。雖然難起領頭羊的作用,但是至少不要被大家徹底甩在后面去了。

4:馬上動手改進程序:

有了想法了就需要馬上動手,架構良好的程序都經得起重構才對,所以一直認為自己的程序架構是非常良好的,那就應該能經得起修改才對,架構好的程序應該不是全盤推倒從來,而是小修改幾個函數就應該能達到內存緩存的目的。

5:新系統要上線要靠譜的測試確認:

程序更新上去后,前后至少要測試1周,各種功能都穩定,數據都正確才能正式投入實際實用。 

    吉日嘎拉,通用權限管理系統組件 

接著就是程序修改的部分:

其實總共就寫了300行不到的代碼,系統的本質的改造就完成了。

1:用戶能訪問的模塊菜單,用戶擁有的操作權限項,改進為泛型。

           protected List<BaseModuleEntity> ModuleList

           protected List<BasePermissionItemEntity> PermissionItemList

2:當用戶需要判斷權限時,一次性把權限讀取到Cache緩存中。

3:權限判斷函數改進為從內存Cache緩存進行判斷。

4:用戶退出時,把相應的內存緩存清除掉,減輕內存的壓力。

5:寫個刷新緩存的功能,有需要時,對所有的緩存進行實時的刷新。

有時候代碼也就300行不到還有一大堆是注釋,有一大堆是沒用的,還有一大堆是重復的,真正有價值的代碼可能不超過50行,但是里面有蠻多故事,有故事的代碼更有生命力,有故事的代碼就更有賣點,有故事的代碼經常更經得起考驗,歡迎大家拍磚,大家一起學習提高,在交流中不斷修正代碼,不斷提高自己,不斷改進錯誤,一天比一天強大。

  1. //----------------------------------------------------------------- 
  2.  // All Rights Reserved , Copyright (C) 2012 , Hairihan TECH, Ltd . 
  3.  //----------------------------------------------------------------- 
  4.   
  5.  using System; 
  6.  using System.Collections.Generic; 
  7.  using System.Linq; 
  8.  using System.Web; 
  9.   
  10.  using DotNet.Business; 
  11.   
  12.  /// <remarks> 
  13.  /// BasePage 
  14.  /// 基礎網頁類 
  15.  ///  
  16.  /// 修改紀錄 
  17.  ///  
  18.  ///    版本:1.0 2012.11.10    JiRiGaLa    整理代碼。 
  19.  ///     
  20.  /// 版本:1.0 
  21.  /// <author>   
  22.  ///        <name>JiRiGaLa</name> 
  23.  ///        <date>2012.11.10</date> 
  24.  /// </author>  
  25.  /// </remarks> 
  26.  public partial class BasePage : System.Web.UI.Page 
  27.  { 
  28.      /// <summary> 
  29.      /// 用戶鎖 
  30.      /// </summary> 
  31.      public static readonly object UserLock = new object(); 
  32.   
  33.      #region 常用操作權限項定義 
  34.   
  35.      /// <summary> 
  36.      /// 訪問權限 
  37.      /// </summary> 
  38.      protected bool permissionAccess = true
  39.   
  40.      /// <summary> 
  41.      /// 新增權限 
  42.      /// </summary> 
  43.      protected bool permissionAdd = true
  44.   
  45.      /// <summary> 
  46.      /// 編輯權限 
  47.      /// </summary> 
  48.      protected bool permissionEdit = true
  49.   
  50.      /// <summary> 
  51.      /// 刪除權限 
  52.      /// </summary> 
  53.      protected bool permissionDelete = true
  54.   
  55.      /// <summary> 
  56.      /// 查詢權限 
  57.      /// </summary> 
  58.      protected bool permissionSearch = true
  59.   
  60.      /// <summary> 
  61.      /// 管理權限 
  62.      /// </summary> 
  63.      protected bool permissionAdmin = false
  64.   
  65.      /// <summary> 
  66.      /// 導出權限 
  67.      /// </summary> 
  68.      protected bool permissionExport = true
  69.   
  70.      /// <summary> 
  71.      /// 導入權限 
  72.      /// </summary> 
  73.      protected bool permissionImport = true
  74.   
  75.      /// <summary> 
  76.      /// 打印權限 
  77.      /// </summary> 
  78.      protected bool permissionPrint = true
  79.   
  80.      #endregion 
  81.       
  82.      // 用戶是否在某個角色里(按編號,按名稱的) 
  83.   
  84.      #region public bool UserIsInRole(string roleCode) 
  85.      /// <summary> 
  86.      /// 用戶是否在某個角色里 
  87.      /// </summary> 
  88.      /// <param name="roleCode">角色編號</param> 
  89.      /// <returns>是否在某個角色里</returns> 
  90.      public bool UserIsInRole(string roleCode) 
  91.      { 
  92.          BaseUserManager userManager = new BaseUserManager(this.UserCenterDbHelper, userInfo); 
  93.          return userManager.IsInRoleByCode(this.UserInfo.Id, roleCode); 
  94.      } 
  95.      #endregion 
  96.       
  97.      // 用戶操作權限常用判斷函數 
  98.   
  99.      #region public void Authorized(string permissionItemCode, string accessDenyUrl = null) 是否有相應權限,同時若沒權限會重新定位到某個頁面 
  100.      /// <summary> 
  101.      /// 是否有相應權限,同時若沒權限會重新定位到某個頁面 
  102.      /// </summary> 
  103.      /// <param name="permissionItemCode">權限編號</param> 
  104.      /// <param name="accessDenyUrl">訪問被阻止的url</param> 
  105.      public void Authorized(string permissionItemCode, string accessDenyUrl = null
  106.      { 
  107.          // 若沒有相應的權限,那就跳轉到沒有權限的頁面里 
  108.          if (!Utilities.UserIsLogOn() || !IsAuthorized(permissionItemCode)) 
  109.          { 
  110.              if (!string.IsNullOrEmpty(accessDenyUrl)) 
  111.              { 
  112.                  HttpContext.Current.Response.Redirect(accessDenyUrl); 
  113.              } 
  114.              else 
  115.              { 
  116.                  HttpContext.Current.Response.Redirect(Utilities.AccessDenyPage + "?PermissionItemCode=" + permissionItemCode); 
  117.              } 
  118.          } 
  119.      } 
  120.      #endregion 
  121.   
  122.      #region public bool IsAuthorized(string permissionItemCode, string permissionItemName = null) 是否有相應的權限 
  123.      /// <summary> 
  124.      /// 是否有相應的權限 
  125.      /// </summary> 
  126.      /// <param name="permissionItemCode">權限編號</param> 
  127.      /// <returns>是否有權限</returns> 
  128.      public bool IsAuthorized(string permissionItemCode, string permissionItemName = null
  129.      { 
  130.          return IsAuthorized(this.UserInfo.Id, permissionItemCode, permissionItemName); 
  131.      } 
  132.   
  133.      public bool IsAuthorized(string userId, string permissionItemCode, string permissionItemName = null
  134.      { 
  135.          // 是否從服務器緩存讀取用戶權限 
  136.          bool fromCache = true
  137.          if (fromCache) 
  138.          { 
  139.              // 這里也可以優化一下,沒必要遍歷所有的操作權限列表 
  140.              int count = this.PermissionItemList.Count(entity => !string.IsNullOrEmpty(entity.Code) && entity.Code.Equals(permissionItemCode, StringComparison.OrdinalIgnoreCase)); 
  141.              return count > 0; 
  142.          } 
  143.          // 實時從數據庫讀取操作權限的設置方法 
  144.          DotNetService dotNetService = new DotNetService(); 
  145.          return dotNetService.PermissionService.IsAuthorizedByUser(this.UserInfo, userId, permissionItemCode, permissionItemName); 
  146.      } 
  147.      #endregion 
  148.   
  149.      #region protected void GetPermissionItemList() 獲用戶擁有的操作權限列表 
  150.      /// <summary> 
  151.      /// 獲用戶擁有的操作權限列表 
  152.      /// </summary> 
  153.      protected void GetPermissionItemList() 
  154.      { 
  155.          // 這里是控制用戶并發的,減少框架等重復讀取數據庫的效率問題 
  156.          lock (BasePage.UserLock) 
  157.          { 
  158.              string cacheKey = "P" + this.UserInfo.Id; 
  159.              if (HttpContext.Current.Session == null || Cache[cacheKey] == null
  160.              { 
  161.                  // 這個是默認的系統表名稱 
  162.                  DotNetService dotNetService = new DotNetService(); 
  163.                  PermissionItemList = dotNetService.PermissionService.GetPermissionItemListByUser(this.UserInfo, this.UserInfo.Id); 
  164.              } 
  165.          } 
  166.      } 
  167.      #endregion 
  168.   
  169.      #region protected List<BasePermissionItemEntity> PermissionItemList 獲用戶擁有的操作權限列表 
  170.      /// <summary> 
  171.      /// 獲用戶擁有的操作權限列表 
  172.      /// </summary> 
  173.      protected List<BasePermissionItemEntity> PermissionItemList 
  174.      { 
  175.          get 
  176.          { 
  177.              lock (BasePage.UserLock) 
  178.              { 
  179.                  // 這里進行了操作權限優化,出錯問題 
  180.                  this.GetPermissionItemList(); 
  181.              } 
  182.              string cacheKey = "P" + this.UserInfo.Id; 
  183.              return Cache[cacheKey] as List<BasePermissionItemEntity>; 
  184.          } 
  185.          set 
  186.          { 
  187.              string cacheKey = "P" + this.UserInfo.Id; 
  188.              Cache[cacheKey] = value; 
  189.          } 
  190.      } 
  191.      #endregion 
  192.       
  193.      // 用戶模塊菜單權限判斷常用函數 
  194.   
  195.      #region public void ModuleAuthorized(string moduleCode, string accessDenyUrl = null) 是否有相應的模塊權限,同時若沒權限會重新定位到某個頁面 
  196.      /// <summary> 
  197.      /// 是否有相應的模塊權限,同時若沒權限會重新定位到某個頁面 
  198.      /// </summary> 
  199.      /// <param name="moduleCode">模塊編號</param> 
  200.      /// <param name="accessDenyUrl">訪問被阻止的url</param> 
  201.      public void ModuleAuthorized(string moduleCode, string accessDenyUrl = null
  202.      { 
  203.          // 若沒有相應的權限,那就跳轉到沒有權限的頁面里 
  204.          if (!Utilities.UserIsLogOn() || !IsModuleAuthorized(moduleCode)) 
  205.          { 
  206.              if (!string.IsNullOrEmpty(accessDenyUrl)) 
  207.              { 
  208.                  HttpContext.Current.Response.Redirect(accessDenyUrl); 
  209.              } 
  210.              else 
  211.              { 
  212.                  HttpContext.Current.Response.Redirect(Utilities.AccessDenyPage + "?ModuleCode=" + moduleCode); 
  213.              } 
  214.          } 
  215.      } 
  216.      #endregion 
  217.   
  218.      #region public bool IsModuleAuthorized(string moduleCode) 是否有相應的模塊權限 
  219.      /// <summary> 
  220.      /// 是否有相應的模塊權限 
  221.      /// </summary> 
  222.      /// <param name="moduleCode">模塊編號</param> 
  223.      /// <returns>是否有權限</returns> 
  224.      public bool IsModuleAuthorized(string moduleCode) 
  225.      { 
  226.          if (this.UserInfo.IsAdministrator) 
  227.          { 
  228.              return true
  229.          } 
  230.          // 這里也可以優化一下,沒必要遍歷所有的模塊列表 
  231.          int count = this.ModuleList.Count(entity => !string.IsNullOrEmpty(entity.Code) && entity.Code.Equals(moduleCode, StringComparison.OrdinalIgnoreCase)); 
  232.          return count > 0; 
  233.      } 
  234.      #endregion 
  235.   
  236.      #region protected void GetModuleList() 獲用戶有訪問權限的模塊列表 
  237.      /// <summary> 
  238.      /// 獲用戶有訪問權限的模塊列表 
  239.      /// </summary> 
  240.      protected void GetModuleList() 
  241.      { 
  242.          // 這里是控制用戶并發的,減少框架等重復讀取數據庫的效率問題 
  243.          lock (BasePage.UserLock) 
  244.          { 
  245.              string cacheKey = "M" + this.UserInfo.Id;  
  246.              if (HttpContext.Current.Session == null || Cache[cacheKey] == null
  247.              { 
  248.                  // 這個是默認的系統表名稱 
  249.                  DotNetService dotNetService = new DotNetService(); 
  250.                  ModuleList = dotNetService.PermissionService.GetModuleListByUser(this.UserInfo, this.UserInfo.Id); 
  251.              } 
  252.          } 
  253.      } 
  254.      #endregion 
  255.   
  256.      #region protected List<BaseModuleEntity> ModuleList 獲用戶有訪問權限的模塊列表 
  257.      /// <summary> 
  258.      /// 獲用戶有訪問權限的模塊列表 
  259.      /// </summary> 
  260.      protected List<BaseModuleEntity> ModuleList 
  261.      { 
  262.          get 
  263.          { 
  264.              lock (BasePage.UserLock) 
  265.              { 
  266.                  // 這里進行了菜單優化,出錯問題 
  267.                  this.GetModuleList(); 
  268.              } 
  269.              string cacheKey = "M" + this.UserInfo.Id;  
  270.              // return Utilities.GetFromSession("UserModuleList") as List<BaseModuleEntity>; 
  271.              return Cache[cacheKey] as List<BaseModuleEntity>; 
  272.          } 
  273.          set 
  274.          { 
  275.              string cacheKey = "M" + this.UserInfo.Id; 
  276.              Cache[cacheKey] = value; 
  277.              // Utilities.AddSession("UserModuleList", value); 
  278.          } 
  279.      } 
  280.      #endregion 
  281.  } 

原文鏈接:http://www.cnblogs.com/jirigala/archive/2012/11/12/2766952.html

【編輯推薦】

責任編輯:彭凡 來源: 博客園
相關推薦

2012-06-20 14:07:28

多線程架構單線程

2021-08-25 15:32:47

腳本程序參數任務

2013-03-28 15:24:29

程序員

2019-01-02 07:36:28

微軟 Windows 程序員

2009-01-20 23:27:55

程序員創業思維障礙

2022-12-03 17:14:03

裁員MQ集群

2020-07-24 07:44:10

程序員思維逆向

2013-04-01 10:27:37

程序員失業

2013-01-17 10:31:13

JavaScriptWeb開發firebug

2024-11-21 12:00:00

字典緩存Python

2021-11-24 11:04:09

技術架構技術前線 IT管理

2018-01-26 14:35:16

程序員入門經歷

2022-08-30 08:13:30

流程模板定期復盤數據

2018-09-28 14:12:48

小程序

2013-05-27 15:57:36

邏輯思維

2017-11-27 11:26:35

程序員Bug調試

2013-05-31 09:05:47

2023-11-27 09:25:42

程序員思維

2021-01-22 05:35:19

Lvm模塊Multipath

2017-11-10 14:00:39

Riverbed應用程序網絡性能
點贊
收藏

51CTO技術棧公眾號

中文字幕日本精品| 精品人伦一区二区三区蜜桃网站| 国产精品视频免费观看www| 蜜桃av.com| 国产亚洲字幕| 午夜视频一区二区三区| 四虎影视永久免费在线观看一区二区三区| 天天干天天色综合| 欧美h版在线| 精品成人一区二区三区| 国产a级片免费观看| 麻豆视频在线观看免费| 成人污视频在线观看| 国产精品∨欧美精品v日韩精品| 午夜激情视频在线播放| 欧美电影完整版在线观看| 欧美综合久久久| 日本福利视频网站| 电影在线一区| 成人免费视频免费观看| 国产精品啪视频| 国产 欧美 日韩 在线| 亚洲区综合中文字幕日日| 日韩av综合网| 女女调教被c哭捆绑喷水百合| 亚洲天堂手机| 一区二区三区四区在线播放| 色姑娘综合av| 全色精品综合影院| 成人免费毛片片v| 成人做爰www免费看视频网站| 日韩一区二区视频在线| 女生裸体视频一区二区三区| 一本一本久久a久久精品综合小说| 精品人妻一区二区三区日产| 久久九九精品视频| 欧美日韩成人一区| 欧美自拍小视频| 亚洲男人av| 精品电影在线观看| 大伊香蕉精品视频在线| fc2ppv国产精品久久| 国产精品天干天干在线综合| 欧美一级二级三级九九九| 天堂在线资源网| 国产成人av电影免费在线观看| 国产日产欧美a一级在线| 欧美brazzers| 天堂在线亚洲视频| 国产91精品久久久久| 日韩视频免费观看高清| 亚洲人成久久| 国语自产偷拍精品视频偷| 国产极品国产极品| 欧美精品午夜| 欧美第一黄网免费网站| 免费无码毛片一区二区app| 久久精品影视| 欧美成人高清视频| 国产大片免费看| 重囗味另类老妇506070| 成年人精品视频| 特级片在线观看| 国产综合自拍| 国语自产精品视频在免费| 国产成人亚洲精品自产在线| 一区二区三区四区五区精品视频 | 欧美日韩精品欧美日韩精品| 中文字幕网av| 成人污污www网站免费丝瓜| 3atv一区二区三区| 久久久久亚洲av无码麻豆| 欧美日韩午夜电影网| 精品久久久久一区二区国产| 中文字幕一区二区人妻电影丶| 久久男人av| 亚洲香蕉在线观看| sm捆绑调教视频| 午夜精品久久99蜜桃的功能介绍| 久久久久久久香蕉网| 亚洲另类欧美日韩| 免费人成精品欧美精品| 亚洲精品欧美日韩专区| 色丁香婷婷综合久久| 久久综合狠狠综合久久综合88 | 青青青青在线| 亚洲国产美女搞黄色| 欧美日韩中文在线视频| 黑人一区二区三区| 欧美成人精品福利| 亚洲欧美视频在线播放| 日韩欧美不卡| 久久免费国产视频| 波多野结衣一区二区三区在线| 精品亚洲porn| 精品高清视频| 永久免费av片在线观看全网站| 亚洲激情在线激情| 韩国日本在线视频| 久久影院一区二区三区| 亚洲日韩中文字幕| 欧美人妻一区二区| 日韩成人伦理电影在线观看| 超碰97国产在线| 成人欧美亚洲| 午夜精品免费在线| 四虎成人在线播放| av亚洲免费| 97精品伊人久久久大香线蕉 | 亚洲精品久久久久久一区二区| 国产精品va在线观看视色| 欧美日韩一区二区三区| 特级黄色片视频| jlzzjlzz亚洲女人| 91国产美女在线观看| 91免费视频播放| 久久青草欧美一区二区三区| 91免费国产精品| 日韩深夜福利网站| 亚洲欧洲黄色网| 久草精品视频在线观看| 国内精品免费**视频| 欧美日韩一区二| free性欧美| 日韩午夜在线影院| 亚洲熟女毛茸茸| 丝瓜av网站精品一区二区| 国产乱码精品一区二区三区中文 | 国产精品青草综合久久久久99| 黄色一级在线视频| 国产一区二区三区| 最新91在线视频| 波多野结衣一本一道| 久久这里只精品最新地址| 很污的网站在线观看| 日韩三级av高清片| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲精品一区二三区| 久久蜜桃av一区二区天堂| 青青青青草视频| 高清一区二区三区| 欧美富婆性猛交| 国产高清在线免费| 亚洲欧美二区三区| 欧美激情第四页| 久久久久久久久久久久久久| 国产综合色香蕉精品| 思思99re6国产在线播放| 欧美在线一区二区| 我不卡一区二区| 日产国产欧美视频一区精品| 日韩成人av电影在线| 亚洲成av在线| 中文字幕亚洲欧美一区二区三区 | 日本一区视频在线观看免费| 自拍视频在线看| 亚洲欧美在线免费观看| 中文字幕在线天堂| 国产精品视频一二三区| 国产日韩欧美久久| 亚洲深深色噜噜狠狠爱网站| 91网在线免费观看| 欧美人与牲禽动交com| 精品播放一区二区| 精品欧美一区二区三区免费观看 | 老司机精品视频在线| 国产系列第一页| aaa国产精品视频| 97超级碰碰碰久久久| 国产主播福利在线| 欧美日韩国产综合草草| 欧美卡一卡二卡三| 成人app下载| 激情网站五月天| 日韩在线二区| 国产91免费视频| 女人高潮被爽到呻吟在线观看| 亚洲四色影视在线观看| 亚洲一区二区影视| 亚洲午夜激情av| a天堂中文字幕| 国产精品一级在线| 黄色动漫网站入口| 久久资源中文字幕| 国产精品香蕉视屏| 韩日精品一区| 色综合久久久久久中文网| 视频二区在线| 在线不卡免费av| 欧美亚洲精品天堂| 亚洲天堂中文字幕| 成人性生活免费看| 麻豆视频观看网址久久| 女人帮男人橹视频播放| 国产一区二区区别| 国产传媒一区| 国产黄色一区| 国产91精品青草社区| 免费日本一区二区三区视频| 亚洲女人天堂av| 国产jzjzjz丝袜老师水多| 一本色道久久综合亚洲aⅴ蜜桃| 亚洲国产123| 91麻豆国产自产在线观看| 亚洲精品中文字幕乱码无线| 亚洲欧美日韩综合国产aⅴ| 色乱码一区二区三区熟女| 在线看成人短视频| av一区二区三区在线观看| 日本欧美韩国| 91超碰caoporn97人人| 黄色成年人视频在线观看| 亚洲香蕉在线观看| 少妇高潮久久久| 欧美一卡2卡3卡4卡| 亚洲图片欧美日韩| 欧美日韩激情美女| 欧美国产日韩综合| 亚洲日本一区二区三区| 亚洲女优在线观看| 91在线观看免费视频| 亚洲精品无码一区二区| 国产在线一区观看| wwww.国产| 久久久亚洲一区| 国产黄色一级网站| 欧美久久九九| 大片在线观看网站免费收看| 日韩欧美伦理| 亚洲精蜜桃久在线| 国内精品久久久久久久影视简单| 国产精品视频免费一区| 亚洲综合影院| av免费精品一区二区三区| 96视频在线观看欧美| 国产欧美日韩免费| av免费在线一区| 国产精品成人免费电影| 日本成人三级电影| 日本午夜精品理论片a级appf发布| 国产色播av在线| 98视频在线噜噜噜国产| 福利在线免费视频| 2019精品视频| jizz内谢中国亚洲jizz| 欧美中文在线免费| 亚洲女同av| 国产成人在线一区| 欧美日韩尤物久久| 国产欧美日韩视频| 精品99re| 成人欧美一区二区三区黑人免费| 综合中文字幕| 成人在线观看av| 偷拍自拍一区| 欧美视频观看一区| 视频一区在线观看| 日韩免费av电影| 99re66热这里只有精品8| 亚洲精品视频一二三| 欧美岛国激情| 欧美国产综合在线| 一区在线免费| 妺妺窝人体色www在线小说| 性xx色xx综合久久久xx| 日本女优爱爱视频| 免费高清在线视频一区·| 91精品999| 丁香婷婷综合色啪| 右手影院亚洲欧美| 国产精品乱子久久久久| 国产成人无码aa精品一区| 亚洲国产精品久久久男人的天堂| 国产精品男女视频| 欧美性受xxxx| 国产美女精品视频国产| 亚洲第一页在线| 国产毛片在线看| 久久视频这里只有精品| 岛国在线视频网站| 国产欧美婷婷中文| 蜜臀av一区| 视频一区视频二区视频三区视频四区国产| 久久影视一区| 成人一对一视频| 捆绑调教一区二区三区| 免费看黄色片的网站| 国产欧美日韩综合| 久久精品www人人爽人人| 色综合久久中文综合久久97| 国产精品久久欧美久久一区| 亚洲国产欧美一区二区三区久久| 粉嫩一区二区三区国产精品| 欧美国产日产韩国视频| 欧美精品资源| 国产女主播一区二区| 精品国产91久久久久久浪潮蜜月| 国产a级黄色大片| 国产亚洲精品自拍| 亚洲欧美一区二区三区不卡| 久久色在线视频| 久久久久人妻一区精品色欧美| 在线观看一区二区视频| 风流少妇一区二区三区91| 中文字幕日韩欧美在线视频| 高清在线视频不卡| 成人黄色免费网站在线观看| 亚洲欧美校园春色| 国产黄色激情视频| 久久精品国产99久久6| 黄色国产在线观看| 亚洲精品国产视频| 中文字幕第31页| 亚洲男人的天堂网站| 牛牛精品视频在线| 91在线精品播放| 全球成人免费直播| 久久精品.com| fc2成人免费人成在线观看播放 | 黑人巨大精品欧美一区二区免费| 国产suv精品一区二区69| 中文字幕av一区二区三区谷原希美| 老色鬼在线视频| 国产精品久久久久久久小唯西川 | 天堂中文网在线| 欧美猛男性生活免费| 天天综合91| 亚洲欧洲一区二区福利| 石原莉奈在线亚洲三区| 7788色淫网站小说| 一区二区三区在线影院| 国产ts变态重口人妖hd| 久久精品男人天堂| 欧美电影在线观看网站| 色噜噜狠狠色综合网| 久久精品日产第一区二区| 成人网站免费观看| 精品国产精品三级精品av网址| 人人妻人人澡人人爽精品日本| 久久99国产精品久久久久久久久| 国色天香久久精品国产一区| 伊人久久大香线蕉成人综合网| 美腿丝袜亚洲三区| 国产亚洲精品精品精品| 欧美亚男人的天堂| 丁香婷婷在线观看| 国产日韩欧美在线观看| 91青青国产在线观看精品| 狠狠干狠狠操视频| 自拍偷拍欧美激情| a级片免费视频| 欧美人与性动交a欧美精品| 日韩欧美高清一区二区三区| 国产精品久久久久7777| 26uuu另类欧美| 久草热在线观看| 久久精品国产69国产精品亚洲| 亚洲成人a级片| 国产制服91一区二区三区制服| 国产成人福利片| 中文字幕在线字幕中文| 亚洲男人天天操| 亚州欧美在线| 欧美成人精品免费| 91在线小视频| 日本视频www色| 欧美成人精品激情在线观看| 中文字幕视频精品一区二区三区| 国产精品久久..4399| 久久久精品综合| 一本到在线视频| 欧美激情国产精品| 色狼人综合干| 久久婷五月综合| 亚洲国产精品综合小说图片区| 视频在线观看你懂的| 国产欧美一区二区三区在线| 欧美三区视频| 播金莲一级淫片aaaaaaa| 欧美日韩午夜在线视频| 欧美色图天堂| 日本高清一区| 国产精品一区二区你懂的| 国产精品一区二区6| 在线观看视频99| 97超碰成人| 鲁一鲁一鲁一鲁一av| 亚洲国产欧美在线| 8888四色奇米在线观看| 成人欧美一区二区三区在线观看| 欧美一级播放| 欧美毛片在线观看| 国产一区二区三区欧美| 伊人久久亚洲| 亚洲欧美自偷自拍另类| 亚洲成人自拍一区| 麻豆电影在线播放| 免费一区二区三区在在线视频| 国产伦精品一区二区三区免费迷 | 久久黄色小视频|