# Memcache caching
## How to calculate infinite expiration timestamp
1. open SSH connection to a web server (or where the Memcache is installed)
2. run this command:
```
lang=bash
(sleep 1; echo "stats"; sleep 1; echo "quit";) | telnet localhost 11211 | grep 'time'
```
Example output:
```
STAT uptime 61335
STAT time 1676435743
```
3. subtract the number after the `uptime` word from the number after the `time` word (e.g. `1676435743 - 61335 = 1676374408`) and remember this number
## How to determine key expiration
1. open SSH connection to a web server (or where the Memcache is installed)
2. run this command:
```
lang=bash
(sleep 1; echo "stats cachedump slab_number_here 0"; sleep 1; echo "quit";) | telnet localhost 11211 | grep 'key_name_here'
```
Example output:
```
ITEM key_name_here [value_here b; timestamp_here s]
```
3. if no data is returned try incrementing the `slab_number_here` parameter by 1 and running that command again
4. if the number in place of the `timestamp_here` text matches the infinite expiration timestamp, then the key will never expire
5. otherwise the key will expire at the given date/time
## How to determine every key expiration/presense in cache
# same steps as above, but ommit the ` | grep 'key_name_here'` part of the command
# iterate all slab numbers until no data is returned
## How to clean the cache
1. if you have CentOS, then run the `systemctl restart memcached.service` command as `root` user on the server
# Database caching
## How to determine key expiration
# open the database (e.g. via phpMyAdmin)
# execute the `SELECT LifeTime FROM SystemCache WHERE VarName = 'key_name_here';` database query
# if you'll get `-1` it means, that the key won't automatically expire
# if you'll get a timestamp it means, that the key will expire after that time
## How to determine every key expiration/presense in cache
1. same steps as above, but ommit the ` WHERE VarName = 'key_name_here'` part of the database query
## How to clean the cache
# open the database (e.g. via phpMyAdmin)
# run the `TRUNCATE SystemCache;` database query in the
# Actual tests
## Testing clean install
# perform a clean install via `/core/install.php` script
# confirm, that at the `System Configuration` installation step the `Maximum Cache Duration (in days)` setting has initial value of `30`
# change value to `25` and proceed with install
# confirm, that after installation was done the `MaxCacheDuration` setting in the `/system/config.php` has value of `25`
## Testing an upgrade
# remove the `$_CONFIG['Misc']['MaxCacheDuration'] = ...;` line in the `/system/config.php` file
# open `/core/install.php` script of existing In-Portal installation
# on the `Installation Maintenance` screen:
* type `root` user login/password
* select the `Upgrade In-Portal` radio button
* press `Continue`
# perform the upgrade
# confirm, that after installation was done the `MaxCacheDuration` setting in the `/system/config.php` has value of `30`
## Testing "setCache"
* setup:
* clean the memory cache (see instructions above)
* change the value of the `MaxCacheDuration` setting in the `/system/config.php` file to the `25`
* set without expiration:
* replace code fragment between `$application->Init();` and `$application->Done();` in the `/index.php` file with this code:
```
lang=php
$application->deleteCache('key_with_def_exp');
$application->setCache('key_with_def_exp', 'v1');
```
* confirm (see instructions above), that "key_with_def_exp" key has expiration of 25 days (from the the time key was set via "setCache" method call)
* set with expiration:
* replace code fragment between `$application->Init();` and `$application->Done();` in the `/index.php` file with this code:
```
lang=php
$application->deleteCache('key_with_exp');
$application->setCache('key_with_exp', 'v2', 3600);
```
* confirm (see instructions above), that "key_with_exp" key has expiration of 1 hour (from the the time key was set via "setCache" method call)
## Testing "addCache"
* setup:
* clean the memory cache (see instructions above)
* change the value of the `MaxCacheDuration` setting in the `/system/config.php` file to the `25`
* add without expiration:
* replace code fragment between `$application->Init();` and `$application->Done();` in the `/index.php` file with this code:
```
lang=php
$application->deleteCache('key_with_def_exp');
$application->addCache('key_with_def_exp', 'v1');
```
* confirm (see instructions above), that "key_with_def_exp" key has expiration of 25 days (from the the time key was set via "addCache" method call)
* add with expiration:
* replace code fragment between `$application->Init();` and `$application->Done();` in the `/index.php` file with this code:
```
lang=php
$application->deleteCache('key_with_exp');
$application->addCache('key_with_exp', 'v2', 3600);
```
* confirm (see instructions above), that "key_with_exp" key has expiration of 1 hour (from the the time key was set via "addCache" method call)
* add won't overwrite:
* replace code fragment between `$application->Init();` and `$application->Done();` in the `/index.php` file with this code:
```
lang=php
$application->addCache('key_with_exp', 'v3', 86400);
echo $application->getCache('key_with_exp');
```
* confirm, that both key value (that is shown on screen) and expiration (see instructions above) matches `$application->addCache('key_with_exp', 'v2', 3600);` command executed above this test
## Testing "setDBCache"
* setup:
* clean the database cache (see instructions above)
* change the value of the `MaxCacheDuration` setting in the `/system/config.php` file to the `25`
* set without expiration:
* replace code fragment between `$application->Init();` and `$application->Done();` in the `/index.php` file with this code:
```
lang=php
$application->deleteDBCache('db_key_with_def_exp');
$application->setDBCache('db_key_with_def_exp', 'v1');
```
* confirm (see instructions above), that "db_key_with_def_exp" key has expiration of 25 days (from the the time key was set via "setDBCache" method call)
* set with expiration:
* replace code fragment between `$application->Init();` and `$application->Done();` in the `/index.php` file with this code:
```
lang=php
$application->deleteDBCache('db_key_with_exp');
$application->setDBCache('db_key_with_exp', 'v2', 3600);
```
* confirm (see instructions above), that "db_key_with_exp" key has expiration of 1 hour (from the the time key was set via "setDBCache" method call)
## Testing internal caches expiration for Memcache
* setup:
* clean the memory cache (see instructions above)
* change the value of the `MaxCacheDuration` setting in the `/system/config.php` file to the `25`
* populate cache:
* login to In-Portal admin console
* open any category record for editing (to populate `master:StructureTree` key)
* make some changes
* save changed record to the database (to set category serial key)
* visit the Front-End in another web browser tab (to populate `master:template_mapping`, `master:cms_menu` and `master:domains_parsed` keys)
* confirm, that:
* these keys have infinite expiration (the `1738250904` number might differ on your install): `site_serial:1738250904`, `site_serial:1738250904:1:master:configs_parsed`, `master:last_cache_rebuild`, `master:StructureTree`, `master:template_mapping`, `master:cms_menu`, `master:sections_parsed`, `master:domains_parsed`, `master:config_files`
* all other keys have an expiration of 25 days
## Testing internal caches expiration for DB cache
* setup:
* clean the memory cache (see instructions above)
* change the value of the `MaxCacheDuration` setting in the `/system/config.php` file to the `25`
* populate cache:
* login to In-Portal admin console
* open any category record for editing (to populate `StructureTree` key)
* make some changes
* save changed record to the database (to set category serial key)
* visit the Front-End in another web browser tab (to populate `template_mapping`, `cms_menu` and `domains_parsed` keys)
* confirm, that:
* these keys have infinite expiration: `configs_parsed`, `last_cache_rebuild`, `StructureTree`, `template_mapping`, `cms_menu`, `sections_parsed`, `domains_parsed`, `config_files`
* all other keys have an expiration of 25 days