PSR6 // Major questions about TTL

186 views
Skip to first unread message

Georges L.

unread,
Jul 30, 2017, 10:34:40 AM7/30/17
to PHP Framework Interoperability Group
Hello folks,

today during a new test implementation (I am the Lead behind PhpFastCache) I got a major question on a concept of the Psr6:

1) If you set a cache item with a TTL of 1sec, then your script duration take more than 2secondes: What's the expected behavior of isHit() ? Supposing that I'm using the same instance of my cacheItem during the whole script execution (not by calling getItem() again).

2) In the same spirit: What's the expected behavior of passing a "past" value to expireAt/ExpirerAfter ? This is not mentioned at all in the Psr6 specs (Only if null is passed)

3) Should getItem() stores instances inside a private property, or should it MIUST get it from the cache storage directly ? This is not mentioned either.

Cheers,
Georges.L


Larry Garfield

unread,
Jul 31, 2017, 11:49:22 PM7/31/17
to php...@googlegroups.com
On 07/30/2017 09:34 AM, Georges L. wrote:
Hello folks,

today during a new test implementation (I am the Lead behind PhpFastCache) I got a major question on a concept of the Psr6:

1) If you set a cache item with a TTL of 1sec, then your script duration take more than 2secondes: What's the expected behavior of isHit() ? Supposing that I'm using the same instance of my cacheItem during the whole script execution (not by calling getItem() again).

The cache lifetime applies as of the moment that the request is run, and isHit() is guaranteed.  That is, if at the millisecond that getItem() or isHit() runs (technically it could be either, I suppose, depending on the implementation) the cache item is valid, then that CacheItem object remains valid until it goes out of scope.


2) In the same spirit: What's the expected behavior of passing a "past" value to expireAt/ExpirerAfter ? This is not mentioned at all in the Psr6 specs (Only if null is passed)

Setting an expire time that's in the past is functionally equivalent to not setting it.  Whether the implementation even bothers to try writing it is, I suppose, up to it, but since a lookup for it will always return a cache miss it doesn't much matter.


3) Should getItem() stores instances inside a private property, or should it MIUST get it from the cache storage directly ? This is not mentioned either.

I'm not sure I follow here.  Can you clarify?

--Larry Garfield

Georges L.

unread,
Aug 1, 2017, 3:01:15 PM8/1/17
to PHP Framework Interoperability Group


Le mardi 1 août 2017 05:49:22 UTC+2, Larry Garfield a écrit :
On 07/30/2017 09:34 AM, Georges L. wrote:
Hello folks,

today during a new test implementation (I am the Lead behind PhpFastCache) I got a major question on a concept of the Psr6:

1) If you set a cache item with a TTL of 1sec, then your script duration take more than 2secondes: What's the expected behavior of isHit() ? Supposing that I'm using the same instance of my cacheItem during the whole script execution (not by calling getItem() again).

Ok !

 
The cache lifetime applies as of the moment that the request is run, and isHit() is guaranteed.  That is, if at the millisecond that getItem() or isHit() runs (technically it could be either, I suppose, depending on the implementation) the cache item is valid, then that CacheItem object remains valid until it goes out of scope.

2) In the same spirit: What's the expected behavior of passing a "past" value to expireAt/ExpirerAfter ? This is not mentioned at all in the Psr6 specs (Only if null is passed)

Setting an expire time that's in the past is functionally equivalent to not setting it.  Whether the implementation even bothers to try writing it is, I suppose, up to it, but since a lookup for it will always return a cache miss it doesn't much matter.

If I understand well, passing an expired time is the same thing than deleting the CacheItem (by forcing it to expire) ?
 
3) Should getItem() stores instances inside a private property, or should it MIUST get it from the cache storage directly ? This is not mentioned either.

I'm not sure I follow here.  Can you clarify?

As you can see here:
https://github.com/PHPSocialNetwork/phpfastcache/blob/final/src/phpFastCache/CacheManager.php#L183

I store the cache items objects to re-serve them statically later if needed (until the script end or detachAllItems() is called).

 

--Larry Garfield

Jason Judge

unread,
Aug 2, 2017, 5:59:01 AM8/2/17
to PHP Framework Interoperability Group
Are you asking if the interface can be used as just a single-request cache, with items only lasting as long as the current page request? It would certainly be nice at times to be able to switch a cache library to this mode for development.

Georges L.

unread,
Aug 3, 2017, 6:25:19 PM8/3/17
to PHP Framework Interoperability Group

Not at all, this is the current behavior of the lib. I do have already a static cache for development purpose.
Unless you call detachAllItems() (which purge the internal reference pointers to the cache items), the getItem() method will serves you a memore-cached item.
I did a quick paint draw to help you to get the concept:
 

Georges L.

unread,
Aug 8, 2017, 8:25:27 AM8/8/17
to PHP Framework Interoperability Group
It's weird to see that almost no one seems to be concerned by those questions ?
Reply all
Reply to author
Forward
0 new messages