Redis Storage + Redis Journal + Redis Session Handler – Kdyby/Redis
- Filip Procházka
- Moderator | 4668
Nedávno byla vydána verze 2.2.0.
Od začátku vývoje se toho hodně změnilo, například nyní se používá nativní PHP rozšíření phpredis, které se stará o komunikaci a protokol jako takový.
Ale hlavně bych chtěl poděkovat @matej21, který strávil několik večerů nad optimalizací nového LUA Journalu a nyní jsme se z invalidace tisícu klíčů dostali na statisíce tagů pro statisíce klíčů bezpečné invalidace.
- simPod
- Člen | 383
Chci se zeptat, mám v boostrap tento kód:
$configurator->setTempDirectory(__DIR__ . '/../temp');
$configurator->createRobotLoader()
->addDirectory(APP_DIR)
->addDirectory(LIBS_DIR)
->register();
$configurator->addConfig(__DIR__ . '/config/config.neon');
\Kdyby\Redis\DI\RedisExtension::register($configurator);
$container = $configurator->createContainer();
Ale dostávám
Fatal Error Class 'Nette\Loaders\NetteLoader' not found
v
File: ...\libs\Kdyby\Redis\DI\RedisExtension.php Line: 28
.
Co dělám špatně? Při instalaci jsem nepoužil Composer. Změna na
\Nette\Loaders\NetteLoader
nepomohla. Díky
- Filip Procházka
- Moderator | 4668
Kdyby nepodporuje minifikované verze Nette. Doporučuji instalaci přes Composer.
- simPod
- Člen | 383
Aha to bude ono. Měl jsem nette minifikované. Každopádně jsem nainstaloval přes Composer a dostávám „Please install and enable the redis extension. https://github.com/…ff/phpredis/“ To asi znamená, že si musím rozšířit funkcionalitu serveru o daný extension (?). Jak se to řeší u poskytovatelů hostingu? Víte o nějakých, kteří dané extension mají nainstalováno? Dík
- Filip Procházka
- Moderator | 4668
A ty máš hosting, který ti nedovolí nahodit vlastní extension do phpka, ale dovolí to používat redis? :)
Pokud máš odvahu, můžeš použít starou verzi kdyby/redis, která pracovala přes sockety a tedy extension nebyl potřeba.
Ale pokud jsi narazil na situaci, že potřebuješ memory databázi a chceš používat redis, těch pár korun navíc za VPS už ti neublíží :)
- LeonardoCA
- Člen | 296
Hosiplan: napada te v cem by mohl byt problem, kdyz redis pri spusteni CLI skriptu, ktery se forkne aby bezel jako daemon vyhodi exception ve forknutem procesu pri cteni objektu z cache?
Redis Client Exception: „ERR unknown command ‚QUIT*2‘“
vyhozeno pri volani metody send na RedisClient.php:355
Pro mysql se connection musi po forknuti obnovit, to same bude platit asi pro redis, ale dival jsem se ze redis vola connect pred kazdym send.
Problem je pokud forkuji process po nacteni bootstrap.php (a sestaveni containeru), pokud se forkne pred, tak problem neni, jen se neda vyuzit autoloading a musi se potlacit uvodni hlaska o spusteni forknuteho processu, protoze pak vyhodi ini_set error ‚headings already sent‘ …
Kdyby se ti chtelo to testnout tak pouzivam http://kvz.io/…mons-in-php/
Editoval LeonardoCA (13. 11. 2013 20:08)
- Filip Procházka
- Moderator | 4668
Hmm, s tímhle nemám vůbec žádné zkušenosti, ale měl bych pro tebe nápad. Nechceš raději zapínat ty procesy samostatně místo forkování? Tyhle wtf by ti zmizely :)
- lukyrys
- Člen | 36
Zdravím, používám již nějakou dobu plugin pro redis storage, je supr. Ale po updatu projektu do nette 2.1 a upgrade redis addonu z githubu se potykam s problemem kdy mi ladenka vyhodi tento error.
Nette\Utils\JsonException #4
Syntax error, malformed JSON
Problem je (dle meho mineni) ze tato chyba vyskakuje nahodile. Nesetkal se s tim jiz nekdo? Muzu v pripade potreby poskytnout html z ladenky.
Diky Lukas.
- Filip Procházka
- Moderator | 4668
Pokud se bojíš o citlivá data můžeš mi ji prosím poslat na email filip@prochazka.su? Laděnka by se určitě hodila. Btw, upgradoval jsi na nejnovější verzi a smazal cache?
- lukyrys
- Člen | 36
Filip Procházka napsal(a):
Pokud se bojíš o citlivá data můžeš mi ji prosím poslat na email filip@prochazka.su? Laděnka by se určitě hodila. Btw, upgradoval jsi na nejnovější verzi a smazal cache?
Ano cache smazana i nekolikrat. Mate to na mailu.
- Filip Procházka
- Moderator | 4668
Nesmazal, máš tam stará data. Snaží se ti to decodovat json, který
není json ale standardní výstup serialize()
což znamená
stará data.
# nula je číslo databáze
$ redis-cli -n 0 flushdb
musíš smazat cache i v redisu
- lukyrys
- Člen | 36
Filip Procházka napsal(a):
Nesmazal, máš tam stará data. Snaží se ti to decodovat json, který není json ale standardní výstup
serialize()
což znamená stará data.# nula je číslo databáze $ redis-cli -n 0 flushdb
musíš smazat cache i v redisu
aha jasne maznout i redis. to je to co se mi prave nechtelo protoze se
v tom drzi i sessiony takze to odhlasi vsechny lidi.. Takze to maznu az nejak
v noci kdy bude mensi pristupnost.
Diky dam vedet.
- David Matějka
- Moderator | 6445
je to vsechno prefixovany, ted jsou tam pro:
Storage – Nette.Storage
Journal – Nette.Journal
Session – Nette.Session
muzes smazat jen specificky klice
redis-cli -n 0 KEYS "Nette.Journal:*" | xargs redis-cli -n 0 DEL
redis-cli -n 0 KEYS "Nette.Storage:*" | xargs redis-cli -n 0 DEL
nevim, jak byly prefixovany meta klice, tak si to vyjed a smaz je kdyztak taky
- Filip Procházka
- Moderator | 4668
To mi jako chcete tvrdit, že jsem tu dokumentaci psal zbytečně? :P
Jasně tam mám napsané, že když používáte redis na session, máte
použít samostatnou databázi, aby se dala cache mazat příkazem
redis-cli -n 0 flushdb
, což je nejefektivnější možný
způsob.
Ale dobrá myšlenka, upravím defaulty aby to fungovalo správně i lidem co nečtou dokumentaci ;)
- David Matějka
- Moderator | 6445
@Filip Prochazka: no a nekdo bude mit na databazi 1 jinou app a tim to rozes…bijes jeste vic. co takhle dat specifikaci databaze jako povinny parametr?
Editoval matej21 (5. 1. 2014 0:15)
- Filip Procházka
- Moderator | 4668
Další otázky prosím zakládejte jako samostatná témata na novém fóru help.kdyby.org. Díky!