cache

package module
v0.0.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 20, 2023 License: MIT Imports: 2 Imported by: 0

README

cache

说明

  • 轻量级的缓存字典

  • 特色:线程安全、高性能、过期回调、健全的方法

  • PS: 当前仅实现memcache, 后续考虑增加 Leveldb、SSDB、Redis等支持

版本

  • go version >= 1.17

方法说明

package cache

// Reply 缓存器响应内容
type Reply interface {
    Has() bool          // 是否存在
    Val() interface{}   // 返回的值
    Err() error         // 返回的错误
    Dur() time.Duration // 剩余时长
    Release()           // 释放响应结果
}

// Cache 字典缓存器
type Cache interface {
    Has(k string) Reply                                     // 是否存在
    Set(k string, v interface{}) Reply                      // 设置键值
    SetX(k string, v interface{}, d time.Duration) Reply    // 设置键值并设置过期时长
    SetN(k string, v interface{}) Reply                     // 设置键值存在时返回错误
    SetNX(k string, v interface{}, d time.Duration) Reply   // 设置键值并设置过期时长,如果存在则返回错误
    Del(k string) Reply                                     // 删除键值(不存在为成功)
    DelExpired(k string) Reply                              // 删除过期键值(不存在为成功)
    Get(k string) Reply                                     // 获取键值
    GetDel(k string) Reply                                  // 获取并删除键值
    GetSet(k string, v interface{}) Reply                   // 获取并设置新的键值
    GetSetX(k string, v interface{}, d time.Duration) Reply // 获取并设置新的键值和过期时长
    Expire(k string, d time.Duration) Reply                 // 设置新的过期时间
    TTL(k string) Reply                                     // 获取过期时间
}

基准参考

goos: windows
goarch: amd64
pkg: github.com/azeroth-sha/cache/memory
cpu: Intel(R) Xeon(R) CPU E3-1231 v3 @ 3.40GHz
BenchmarkSet-8                   6725599               531.3 ns/op            76 B/op          3 allocs/op
BenchmarkSet-8                   7228197               516.8 ns/op            75 B/op          3 allocs/op
BenchmarkSet-8                   7281092               503.2 ns/op            75 B/op          3 allocs/op
BenchmarkGet-8                  11582373               301.1 ns/op            18 B/op          1 allocs/op
BenchmarkGet-8                  12887090               314.6 ns/op            18 B/op          1 allocs/op
BenchmarkGet-8                  10562623               298.8 ns/op            17 B/op          1 allocs/op
BenchmarkDel-8                  17233570               191.9 ns/op            15 B/op          1 allocs/op
BenchmarkDel-8                  18140698               196.7 ns/op            15 B/op          1 allocs/op
BenchmarkDel-8                  18709345               195.9 ns/op            15 B/op          1 allocs/op
BenchmarkSetX-8                  9990625               384.4 ns/op            26 B/op          2 allocs/op
BenchmarkSetX-8                  8875980               351.9 ns/op            26 B/op          2 allocs/op
BenchmarkSetX-8                 10816364               340.7 ns/op            26 B/op          2 allocs/op
BenchmarkSetWithParallel-8      22513000               146.9 ns/op            72 B/op          3 allocs/op
BenchmarkSetWithParallel-8      24671593               143.8 ns/op            72 B/op          3 allocs/op
BenchmarkSetWithParallel-8      25524890               145.6 ns/op            73 B/op          3 allocs/op
BenchmarkGetWithParallel-8      45086565                92.57 ns/op           16 B/op          1 allocs/op
BenchmarkGetWithParallel-8      45930435                92.79 ns/op           16 B/op          1 allocs/op
BenchmarkGetWithParallel-8      44680366                97.86 ns/op           16 B/op          1 allocs/op
BenchmarkDelWithParallel-8      50732734                66.31 ns/op           15 B/op          1 allocs/op
BenchmarkDelWithParallel-8      49343863                66.49 ns/op           15 B/op          1 allocs/op
BenchmarkDelWithParallel-8      53936947                67.42 ns/op           15 B/op          1 allocs/op
BenchmarkSetXWithParallel-8     34435525               100.3 ns/op            24 B/op          2 allocs/op
BenchmarkSetXWithParallel-8     36729596               101.5 ns/op            24 B/op          2 allocs/op
BenchmarkSetXWithParallel-8     33610495               106.0 ns/op            24 B/op          2 allocs/op
PASS
ok      github.com/azeroth-sha/cache/memory     93.894s

灵感来源

  • 灵感来源于go-cache并新增了一些方法

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Register

func Register(name string, f NewFunc)

Register 注册缓存生成器

Types

type Cache

type Cache interface {
	Has(k string) Reply                                     // 是否存在
	Set(k string, v interface{}) Reply                      // 设置键值
	SetX(k string, v interface{}, d time.Duration) Reply    // 设置键值并设置过期时长
	SetN(k string, v interface{}) Reply                     // 设置键值存在时返回错误
	SetNX(k string, v interface{}, d time.Duration) Reply   // 设置键值并设置过期时长,如果存在则返回错误
	Del(k string) Reply                                     // 删除键值(不存在为成功)
	DelExpired(k string) Reply                              // 删除过期键值(不存在为成功)
	Get(k string) Reply                                     // 获取键值
	GetDel(k string) Reply                                  // 获取并删除键值
	GetSet(k string, v interface{}) Reply                   // 获取并设置新的键值
	GetSetX(k string, v interface{}, d time.Duration) Reply // 获取并设置新的键值和过期时长
	Expire(k string, d time.Duration) Reply                 // 设置新的过期时间
	TTL(k string) Reply                                     // 获取过期时间
}

Cache 字典缓存器

func New

func New(name string, sets ...interface{}) Cache

New 创建新的缓存器

type NewFunc

type NewFunc func(...interface{}) Cache

NewFunc 缓存器创建方法 参数自定义,创建缓存器时透传

type Reply

type Reply interface {
	Has() bool          // 是否存在
	Val() interface{}   // 返回的值
	Err() error         // 返回的错误
	Dur() time.Duration // 剩余时长
	Release()           // 释放响应结果
}

Reply 缓存器响应内容

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL