This is an issue I had recently in a project with cache_fu. Models that I found and cached based on permalinks weren't expiring the cache correctly when getting updated. Here's an example scenario.
Say you have a blog with posts. However, instead of using a url like http://paulscoolblog.com/posts/23 you want something that's more search engine friendly and readable for the user. So you use a permalink (maybe using the permalink_fu plugin) that's auto-generated based on the title of the post. This post would have a url that looks something like http://paulscoolblog.com/posts/gotcha-with-cache_fu-and-permalinks.
In your controller's show method you'd probably find the post like this:
@post = Post.find_by_permalink(params[:permalink])
However, you'd want to do the caching thing so you'd actually do this:
@post = Post.cached(:find_by_permalink, :with => params[:permalink])
The problem that I ran into, which is probably obvious to anyone familiar with cache_fu, was that when updating the post, it wouldn't expire the cache. That part of the post model looks like this:
class Post < ActiveRecord::Base
before_save :expire_cache
...
end
Do you see it? The issue is that when expire_cache gets called on the object, it expires the key Post:23 from the cache (assuming 23 was the id of the post). However, when the post was cached using the cached(:find_by_permalink ...) method, it put the post object into the cache with a key of Post:find_by_permalink:gotcha-with-cache_fu-and-permalinks.
Luckily, it's a fairly simple fix. If you have a model that is commonly accessed through permalinks, just write your own cache expiry method that looks for both keys and expires them.