golang實現自定義驅動的Cache

2021-09-22 19:27:07 字數 2873 閱讀 6264

近期在寫 activedrouter專案的時候需求乙個快取模型,要求快取模型支援不同驅動,例如:memory、file、redis、mysql,實現思路**如下:

cache.go檔案,定義快取對外介面

//activedrouter

//快取驅動介面定義

//可以自定義擴充套件驅動型別 預設是 memory driver

package cache

import (

"./driver"

)//cache介面宣告

type cacher inte***ce )

get(k string) (inte***ce{}, bool)

del(k string)

has(k string) bool

}//create memory cache

//type "file" or "memory"

func newcache(cachetype string) cacher

case "file":

}case "mysql":

}case "redis":

}case "mongodb":

}} return nil

}

driver.go  實現驅動,這裡我只利用map實現了,具體其他驅動可自行實現

//activedrouter

//快取驅動介面定義

//可以自定義擴充套件驅動型別 預設是 memory cache

package driver

//容器介面宣告

type containerer inte***ce ) containerer

erasekvpair(k inte***ce{}) containerer

pushkvmaps(maps ...map[string]inte***ce{}) containerer

resetkvpair(k string, v inte***ce{}) containerer

resetoraddkvpair(k string, v inte***ce{}) containerer

resetkvpairs(kvmaps map[string]inte***ce{}) containerer

resetoraddkvpairs(kvmaps map[string]inte***ce{}) containerer

exist(k inte***ce{}) bool

getdata() *map[string]inte***ce{}

}//基於記憶體實現的快取

type cacheimpl struct

func (self *cacheimpl) exist(k inte***ce{}) bool

func (self *cacheimpl) getstorage() containerer

//set

func (self *cacheimpl) set(k string, v inte***ce{})

//get

func (self *cacheimpl) get(k string) (inte***ce{}, bool)

//erase

func (self *cacheimpl) del(k string)

//has

func (self *cacheimpl) has(k string) bool

//map實現的記憶體驅動

type mapcontainer struct

}//建立資料channer

func newmapcontainer() *mapcontainer )}

}func (this *mapcontainer) pushkvpair(k, v inte***ce{}) containerer else

return this

}func (this *mapcontainer) exist(k inte***ce{}) bool

func (this *mapcontainer) erasekvpair(k inte***ce{}) containerer else

return this

}func (this *mapcontainer) pushkvmaps(maps ...map[string]inte***ce{}) containerer

} return this

}func (this *mapcontainer) resetkvpair(k string, v inte***ce{}) containerer

return this

}func (this *mapcontainer) resetoraddkvpair(k string, v inte***ce{}) containerer

func (this *mapcontainer) resetkvpairs(kvmaps map[string]inte***ce{}) containerer

} return this

}func (this *mapcontainer) resetoraddkvpairs(kvmaps map[string]inte***ce{}) containerer

return this

}func (this *mapcontainer) getdata() *map[string]inte***ce{}

golang 自定義型別

1.8 自定義型別 可將型別分為命名和未命名兩 大類。命名型別包括 bool int string 等,而 array slice map 等和具體元素型別 長度等有關,屬於未命名型別。具有相同宣告的未命名型別被視為同 一型別。具有相同基型別的指標。具有相同元素型別和 長度的 array。具有相同元...

C 自定義屬性實現

在用c 寫程式的時候,可能會用到自定義屬性來傳遞一些資料,這次就來簡單看看自定義屬性的用法 1.寫自定義屬性類 a.宣告自定義屬性類,繼承自attribute類 b.定義所需的建構函式,欄位和屬性 c.新增attributeusageattribute屬性 attributeusage attrib...

C 自定義String的實現

這個在面試或筆試的時候常問到或考到。已知類string的原型為 class string 請編寫string的上述4個函式。普通建構函式 string string const char str else string的析構函式 string string void 拷貝建構函式 string st...