サービス・エンド・キャッシュのいくつかの使い方について説明します


キャッシュは常に新しい話題で、サービス側の技術として、もしあなたが1年もmemcached類の製品を使ったことがないならば、それはあなたの会社が本当に小さすぎて、あるいはあなたの仕事があまりにも辺鄙だとしか言えません.
キャッシュといえば、「データベースの前に立ちはだかる」ことが一番ストレートかもしれません.これはキャッシュの最も原始的な意味であり,キャッシュの最も一般的な使い方も示している.
元のモード
コード例1(オリジナルモード):
  //        [     ]
data = getfromcache(id)
if data == null then
    //         [     ]
    data = getfromdb(id)
    //  1 
    setintocache(id, data, 86400)
    return data
end

return data

, N , getfromcache, data , getfromdb, setintocache。 , 。

, if , , , setintocache , getfromcache。

? 。 value 。

value data, , json ,

  {data:data,atime:1429618765}

atime 。 。

2( ):

  //        [     ]
data = getfromcache(id)
data = json.decode(data)
//            ,          ,                  5    (                   ,      5  ,              )
if data != null && data.atime+86400 < now then
    data.atime = now+300-86400
    data = json.encode(data)
    //    cache  ,  10       
    setintocache(id, data, 864000)
    //   data   null        if      
    data = null
end

if data == null then
    //         [     ]
    data = getfromdb(id)
    data = {data:data, atime:now}
    data = json.encode(data)
    //    cache  ,  10       
    setintocache(id, data, 864000)
    return data
end

return data

, , 1 , getfromcache setintocache , N , , 。

, 。 , 1 , getfromcache setintocache , getfromdb , 。 2 , , 。

1 getfromcache setintocache 2 。 2 , 。 。 。

, 2 , 1( atime 。 atime )。

? , 。 , 。 , , 。 。

: , , , , 。

, 。 , id key。 , , 10 。 key page_1,page_2...page10。

, 10 , 10 。 。

。 2 , 2 , atime , 。 , 。 , updatetime 。 , updatetime atime , , , 。

3( ):

  //        [     ][     get                ]
data = getfromcache(id)
updatetime = getupdatetime(id)
data = json.decode(data)
//            ,          ,                  5    (                   ,      5  ,              )
if data != null && (data.atime+86400 < now || date.atime < updatetime) then
    data.atime = now+300-86400
    data = json.encode(data)
    //    cache  ,  10       
    setintocache(id, data, 864000)
    //   data   null        if      
    data = null
end

if data == null then
    //         [     ]
    data = getfromdb(id)
    data = {data:data, atime:now}
    data = json.encode(data)
    //    cache  ,  10       
    setintocache(id, data, 864000)
    return data
end

return data

2

  date.atime < updatetime

, , , 。

, , 。

。( , , !)

, , PHP ( X)。

:ligang1#letv.com