I got very confused for a while because I installed cachier with a c instead of cashier. Similar name, similar functionalities, different projects.
Curious why you have the str() cast around pickle.dumps() where you make the md5 key. I thought it would always return a string. Does that catch some known corner case, or just being cautious?