wb-cache 0.1.0

Your L1 in-app write-behind cache for various kinds of backends.
Documentation
<mxfile host="65bd71144e">
    <diagram id="E1ysChYoaKABW_00E0bF" name="Page-1">
        <mxGraphModel dx="911" dy="910" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
            <root>
                <mxCell id="0"/>
                <mxCell id="1" parent="0"/>
                <mxCell id="7" value="Data&lt;br&gt;Controller" style="rounded=1;whiteSpace=wrap;html=1;strokeWidth=3;fontFamily=American TypeWriter;fontStyle=1;fontSize=20;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" parent="1" vertex="1">
                    <mxGeometry x="40" y="200" width="160" height="80" as="geometry"/>
                </mxCell>
                <mxCell id="8" value="Cache&lt;br&gt;Controller" style="rounded=1;whiteSpace=wrap;html=1;strokeWidth=3;fontFamily=American TypeWriter;fontStyle=1;fontSize=20;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" parent="1" vertex="1">
                    <mxGeometry x="40" y="40" width="770" height="80" as="geometry"/>
                </mxCell>
                <mxCell id="9" value="Updates&lt;div&gt;Pool&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;strokeWidth=3;fontFamily=American TypeWriter;fontStyle=1;fontSize=20;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" parent="1" vertex="1">
                    <mxGeometry x="200" y="200" width="160" height="80" as="geometry"/>
                </mxCell>
                <mxCell id="10" value="Cache" style="rounded=1;whiteSpace=wrap;html=1;strokeWidth=3;fontFamily=American TypeWriter;fontStyle=1;fontSize=20;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" parent="1" vertex="1">
                    <mxGeometry x="360" y="200" width="160" height="80" as="geometry"/>
                </mxCell>
                <mxCell id="13" value="Monitoring&lt;div&gt;Task&lt;/div&gt;" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;rounded=1;strokeColor=#666666;strokeWidth=3;align=center;verticalAlign=middle;fontFamily=American TypeWriter;fontSize=20;fontColor=#333333;fontStyle=1;fillColor=#f5f5f5;" parent="1" vertex="1">
                    <mxGeometry x="520" y="200" width="150" height="80" as="geometry"/>
                </mxCell>
                <mxCell id="14" value="Observers" style="swimlane;fontStyle=1;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;rounded=1;strokeColor=#666666;strokeWidth=3;align=center;verticalAlign=middle;fontFamily=American TypeWriter;fontSize=20;fontColor=#333333;fillColor=#f5f5f5;swimlaneFillColor=default;" parent="1" vertex="1">
                    <mxGeometry x="670" y="200" width="140" height="120" as="geometry"/>
                </mxCell>
                <mxCell id="15" value="Observer 1" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;fontFamily=American TypeWriter;fontSize=20;fontColor=#333333;fontStyle=1;" parent="14" vertex="1">
                    <mxGeometry y="30" width="140" height="30" as="geometry"/>
                </mxCell>
                <mxCell id="16" value="..." style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;fontFamily=American TypeWriter;fontSize=20;fontColor=#333333;fontStyle=1;" parent="14" vertex="1">
                    <mxGeometry y="60" width="140" height="30" as="geometry"/>
                </mxCell>
                <mxCell id="17" value="Observer N" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;fontFamily=American TypeWriter;fontSize=20;fontColor=#333333;fontStyle=1;" parent="14" vertex="1">
                    <mxGeometry y="90" width="140" height="30" as="geometry"/>
                </mxCell>
                <mxCell id="18" value="" style="shape=flexArrow;endArrow=classic;startArrow=classic;html=1;entryX=0.103;entryY=1.006;entryDx=0;entryDy=0;entryPerimeter=0;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" source="7" target="8" edge="1">
                    <mxGeometry width="100" height="100" relative="1" as="geometry">
                        <mxPoint x="370" y="490" as="sourcePoint"/>
                        <mxPoint x="470" y="390" as="targetPoint"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="21" value="" style="shape=flexArrow;endArrow=classic;startArrow=classic;html=1;entryX=0.519;entryY=0.975;entryDx=0;entryDy=0;fillColor=#f5f5f5;strokeColor=#666666;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryPerimeter=0;" parent="1" source="10" target="8" edge="1">
                    <mxGeometry width="100" height="100" relative="1" as="geometry">
                        <mxPoint x="440.5" y="198" as="sourcePoint"/>
                        <mxPoint x="439.5" y="120" as="targetPoint"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="22" value="" style="endArrow=none;dashed=1;html=1;entryX=0.72;entryY=0.979;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;strokeWidth=4;strokeColor=#B3B3B3;" parent="1" source="13" target="8" edge="1">
                    <mxGeometry width="50" height="50" relative="1" as="geometry">
                        <mxPoint x="400" y="460" as="sourcePoint"/>
                        <mxPoint x="450" y="410" as="targetPoint"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="23" value="" style="shape=flexArrow;endArrow=none;startArrow=classic;html=1;fillColor=#f5f5f5;strokeColor=#666666;exitX=0.5;exitY=0;exitDx=0;exitDy=0;endFill=0;" parent="1" source="9" edge="1">
                    <mxGeometry width="100" height="100" relative="1" as="geometry">
                        <mxPoint x="280.5" y="198" as="sourcePoint"/>
                        <mxPoint x="280" y="118" as="targetPoint"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="24" value="" style="endArrow=classic;html=1;strokeWidth=4;strokeColor=#B3B3B3;" parent="1" target="14" edge="1">
                    <mxGeometry width="50" height="50" relative="1" as="geometry">
                        <mxPoint x="740" y="120" as="sourcePoint"/>
                        <mxPoint x="450" y="410" as="targetPoint"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="25" value="events" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="24" vertex="1" connectable="0">
                    <mxGeometry x="-0.119" y="3" relative="1" as="geometry">
                        <mxPoint as="offset"/>
                    </mxGeometry>
                </mxCell>
            </root>
        </mxGraphModel>
    </diagram>
</mxfile>