I’m looking for a way to cache as much data as possible in my app. Most of this data, are items which are crucial for the following steps, like a list of friends. Depending on the selected friend I show a list with certain items and can send something to this friend.
I would like to cache the list of friends. In such way, that it’s not possible to send something to a non-existant friend, which would obviously cause an error. Or maybe the cache could work such that it shows a “invalid cached friend” message and refreshes after it…?
The list of friends will not change very frequently but still can change while the user is using the app.
I also want to cache the items which can be sent to the users. These also will not change very frequently, but it’s very important that the user doesn’t send non-existent items, and it’s of course desirable that they see the newest items, if they were updated on the server side.
It’s the same principle like caching items which can be bought, for example. It’s critical that the users doon’t try to complete a transaction with an invalid item.
I have already done some research, but could only come up with a rough idea so far:
Compare data using hash or timestamp: In this case I don’t know at which point to do it? Loading the screen probably doesn’t make any sense, since the user would have to wait for the server’s response anyways. Maybe a background process? But how often do I run it? How do I synchronize?
Also, I can add an update menu item such that the user can ensure that the data is updated. But it still doesn’t solve the problem that the user can try to complete transactions with invalid data (if they don’t press the button).
I also found some information about “real time data” and AVIs but I think that’s not applicable for my case, my data will change seldomly, but it’s required that it’s valid, since it’s not only informative data, it’s transaction determining data.
What is the way to handle this?
I think you are right, you should check the timestamp with the data source (the server).
If that’s a peer-to-peer exchange between friends, just before sending your data, request its timestamp from the server. Not so much data, usually close to real time. But there’s still some minor probability of sending obsolete data – just “a nanosecond” after an update.
If it’s through the server (and why not?), as a bonus, you will have optimistic locking by checking the timestamp on the server and canceling the transaction if the data being sent is obsolete.