From our lunch talk I got the impression that the cache module is not ACID compliant:
SELECT statements inside a read/write transactions return cached results. This means the statement is not sent to the server which means the read locks are not set. With REPEATABLE-READ (or SERIALIZABLE) isolation level this makes it not ACID compliant.
Please change this so read/write transactional reads do not return cached results.