An interesting commit is now available in PHP 7.0.2+; it provides access to zlib's manual dictionary functionality.

What's interesting about being able to inject a dictionary is removing the dictionary overhead of compression from individual items by using a shared one. This is ideal when you're storing data that both (1) isn't large enough to be reliably smaller when storing an ad hoc dictionary alongside the compressed data but (2) has enough duplication that compression sans dictionary will yield significant footprint savings.

Cache and serialized items stored in a database (or similar) are ideal for this: - It's easier to scale PHP process pools than the primary DB server. - Cache item size is a common bottleneck with the DB. - Serialized items in a table tend to have patterns that would benefit from a shared dictionary. - It actually may be cheaper even from PHP's perspective to inflate/deflate than handle more data over the wire. - Some items, like forms and views, can be over a megabyte in their uncompressed forms.

The only real challenge is picking the dictionary and, if it changes, providing versioning. However, even generating and shipping a static (but decent) dictionary per cache bin (or for serialized form data) would massively reduce storage, memory, and network overhead.

Should there be updates to a dictionary, it's possible to detect a mismatch and try an older dictionary. zlib will let you know there's an adler32 mismatch between the dictionary needed and the dictionary supplied.

GitHub Issue #: 
1511