2010-06-14 13 views
5

Khi bạn sử dụng thuộc tính cachedwithin trong cfquery nó lưu trữ truy vấn trong bộ nhớ như thế nào. Nó có lưu trữ nó chỉ bằng tên bạn gán cho truy vấn không? Ví dụ, nếu trên trang chỉ mục của tôi, tôi lưu trữ một truy vấn trong một giờ và đặt tên là getPeople sẽ là một truy vấn có cùng tên trên một trang khác (hoặc cùng một trang cho vấn đề đó) sử dụng kết quả được lưu trong bộ nhớ cache hoặc sử dụng một số logic tốt hơn để quyết định xem đó có phải là cùng một truy vấn không?Sử dụng cachedwithin attibute bên trong cfquery

Ngoài ra, nếu có biến trong truy vấn của bạn, bộ nhớ cache có tính đến giá trị của biến không?

Trả lời

5

Đó không chỉ là tên - đó là truy vấn chính xác mà bạn đang chạy.

<cfquery name="getPeople" cachedwithin=".5" ...> 
select name from employee order by name 
</cfquery> 

Nếu bạn gọi cùng một truy vấn này ở bất kỳ nơi nào khác trong ứng dụng, bạn sẽ nhận được phiên bản được lưu trong bộ nhớ truy vấn đầu tiên trong nửa ngày. Nhưng những thông tin này sẽ được truy cập vào cơ sở dữ liệu để có dữ liệu mới:

<!--- Different name, same SQL: A new cached query ---> 
<cfquery name="getEmployees" cachedwithin=".5" ...> 
select name from employee order by name 
</cfquery> 

<!--- Different SQL, same name: Redefining the cached query ---> 
<!--- Note: As pointed out in comments, it's not really overwriting the old query 
     of the same name, but making a new one in the cache. The first one by the 
     same name is still in the cache, waiting for eviction. ---> 
<cfquery name="getPeople" cachedwithin=".5" ...> 
select name from employee order by name desc 
</cfquery> 

Và có, nó có tính đến một biến. Nếu bạn sử dụng cfqueryparam - mà bạn nên làm - cơ sở dữ liệu của bạn sẽ lưu trữ kế hoạch truy vấn, nhưng thậm chí sử dụng cachedwithin, mỗi truy vấn có thông số đã thay đổi sẽ được coi là khác với phối cảnh bộ nhớ cache truy vấn. Lưu ý rằng điều này có nghĩa là nếu bạn sử dụng cachedwithin trên truy vấn chạy nhiều lần với các tham số khác nhau, bạn sẽ tràn bộ nhớ cache truy vấn của mình với các truy vấn có tỷ lệ truy cập bộ nhớ cache thấp.

+0

vì vậy những gì bạn đang nói là tập hợp kết quả getPeople thứ 2 sẽ thay thế tập hợp kết quả getPeople thứ nhất? – Jason

+0

gói truy vấn bộ nhớ cache? có thật không? – Henry

+0

@ Jason, theo doc, không, vì câu lệnh SQL khác nhau mặc dù chúng có cùng tên truy vấn. – Henry

Các vấn đề liên quan