phần 2: Data Caching
ở bài trước tôi đã giới thiệu với bạn 2 loại cache trong ASP.Net là Output caching và Fragment caching. Cả 2 phương pháp này đều giúp bạn tăng tốc độ xử lý trên ứng dụng web của mình. Tôi cũng đã trình bày những trường hợp phù hợp nhất để sử dụng 2 loại cache này. Tuy nhiên ASP còn cung cấp một kiểu cache khác rất hữu dụng mà bạn nên sử dụng trong nhiều trường hợp đó là Data cahing. Một cách đơn giản nhất, bạn có thể hiểu data cahing là một kĩ thuật được cung cấp để lưu trữ và truy cập các phần tử trong bộ nhớ. Điều đó có nghĩa là mỗi một đối tượng độc lập (Hầu hết các đối tượng của .NET) sẽ được cache và chia sẻ trong tất cả các Request và Session. Bài này tôi xin giới thiệu với bạn 3 phương thức được dùng trong data caching.
Phương thức Cache:
Đây là cách đơn giản nhất để bạn có thể lấy được một đối tượng hay dữ liệu vào cache. Nếu bạn đã quen thuộc với ASP, bạn sẽ thấy điều này rất đơn giản cũng giống như khi bạn sử dụng biến session.
Đây là cách bạn lưu dữ liệu vào cache:
strVal = “something trivial”;
cache(“item”) = strVal;
Trong đó:
item là tên biến.
strVal là một giá trị biến bạn sẽ lưu nó vào cache.
Để trả lại giá trị cho biến hay lấy lại dữ liệu:
newVariable = cache(“item”);
Rất đơn giản để lưu và lấy lại dữ liệu từ cache nhưng bạn hãy luôn nhớ rằng data cache không chỉ làm việc được với các dữ liệu đơn giản kiểu chuỗi như ví dụ trên mà nó có thể làm việc với tất cả các loại dữ liệu ví dụ như kiểu mảng cũng có thể được lưu lại bằng cách này.
Phương thức .Insert & .Add
Vì Cache là một collection, nên chúng ta cũng có thể sử dụng hai phương thức là Insert và Add để thêm vào Cache. Cú pháp như sau:
strVal = “this is SOOO exciting!” ;
cache.insert(“item”, strVal);
‘or
cache.add(“item”, strVal) ;
Cú pháp của 2 phương thức này hoàn toàn giống nhau. Có một điều khác đó là hàm add có thêm một lựa chọn, có thể trả về một đối tượng đã có trong dữ liệu cache. Bạn có thể chọn một trong 2 phương thức này tùy thuộc vào yêu cầu của bạn.
Hãy xem lại bạn đã học được những gì từ bài viết này. Đầu tiên bạn được đưa ra 3 loại cache để lựa chọn ( output cache, fragment cache và data cache). Tiếp đến, khi bạn sử dụng data cache bạn được cung cấp thêm những hàm để thi hành. Bạn được chọn lựa giữa hàm insert và hàm add. Cuối cùng tôi sẽ hướng dẫn các bạn làm sao để quy định thời gian kết thúc.
Đầu tiên là một ví dụ để thiết lập một thời gian kết thúc. Bạn có thể làm như sau:
strVal = “I’m learning so much!”
cache.insert(“item”, strVal, nothing, datetime.now.addminutes(10), timespan.zero) ‘there should be no carriage return here
datetime.now.addminutes(10): đối tượng sẽ “chết” sau 10 phút.
Timespan: dùng để thay đổi thời gian kết thúc.
Chúng ta hãy xét ví dụ tiếp theo. ví dụ này xét thời gian hủy đối tượng đến thời điểm sau request cuối cùng của object đó.
strVal = “Caching is so much fun!”
cache.insert(“item”, strVal, nothing, datetime.maxvalue,
timespan.fromseconds(60)) ‘there should be no carriage return here
Thuộc tính datetime.maxvalue vô hiệu hóa sự kết thúc đối tượng.
Có một lựa chọn rất thú vị. Chúng ta có thể làm cho ứng dụng bỏ đi một đối tượng trong cache, phụ thuộc vào sự thay đổi của các đối tượng khác. Khi một đối tượng mà nó phụ thuộc bị xoad đi thì nó cũng không còn được lưu trong cache nữa. Nó có thể là một file, một hoặc là nhiều đối tượng nào đó được lưu.
Hãy đọc ví dụ sau:
strVal = “I may or may not have understood these directions…”
cache.insert(“item”, strVal, New CacheDependency(Server.MapPath(“depend.xml”)))
Cache cũng có những nhược điểm đó là nó làm tốn bộ nhớ. Khi bạn lưu trữ lại quá nhiều cũng dẫn tới những bất cập trong việc quản lý dữ liệu. Micosoft đã tính đến trường hợp này và cung câp cho chúng ta những thuộc tính để thiết lập sự ưu tiên.
Các thuộc tính:
* Not Removable- không bao giờ thu dọn dẹp ở bộ nhớ thấp.
* High- dọn dẹp nhứng phần tử cuối cùng
* Normal- mặc định
* BelowNormal – more likely purged
* Low – first purged
Trước khi đưa ra ví dụ, tôi muốn bạn biết rằng chúng ta có 2 lựa chọn bạn phải có khi thiết lập các thuộc tính của cachel. Đầu tiên là CacheItemPriorityDecay sẽ thiết lập các thuộc tính cho các đối tượng mà được truy cập không thường xuyên. Thứ 2 là CacheItemRemoveCallback sẽ được thiết lập khi ứng dụng muốn dọn dẹp các phần tử cache. Các thuộc tính là: DependencyChanged, Expired, Removed, or Underused.
strVal = “Finally, we’re done!”
cache.insert(“item”, strVal, nothing, datetime.maxvalue, _
timespan.fromseconds(60), CacheItemPriority.BelowNormal, _
CacheItemPriorityDecay.Fast, OnRemove)
Pros and Cons of Data Caching
Như vậy với những trang quá động (dữ liệu được thay đổi nhiều theo thời gian), Data caching đã cung cấp những cải tiến mềm dẻo và thực thi cho bạn. Nếu ứng dụng của bạn có một lượng truy cập lớn trên nhiều trang web, bạn có thể lưu nó vào cache sau đó phân phát đến từng trang một đó là ưu điểm lớn nhất. Bạn có thể load chúng vào cache lần đầu tiên được requested và sau đó sẽ phân bổ nó đi từ bộ nhớ. Điều này rất tuyệt cho tập hợp các dữ liệu được lấy từ cơ sở dữ liệu ví dụ như là một employee list hay là từ một site có cấu trúc điều hướng mà bạn không muốn cứ phải truy cập đến database ở từng trang một.
Phản hồi gần đây