How about make a transparent cache layer?
If small table, cache all data in memory or redis or memcached like this:

```
class MyModel(Cache.Model):
    Meta:
        cache_db = ':memory:'  # or 'redis' or 'memcached'
      ...
```

If big table, cache a part of data by a range define.

```
class MyModel(Cache.Model):
    Meta:
        cache_db = ':memory:'
        cache_range = CacheRange(fieldname, min_value, max_value)
      ...
```

If need dynamic cache, record select sql history, and merge result data by primary key in cache db.
If new select sql in history, hit cache, if not, select from backend database and cache it.
User can limit cache items count by cache_limit parameter.

If save or delete executed, remove cache data or reload cache data.

