storage

package
v0.0.0-...-a2093d6 Latest Latest
Warning

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

Go to latest
Published: Mar 11, 2022 License: LGPL-2.1 Imports: 10 Imported by: 0

README

Redis

基本命令

// 基本键值操作 Set - 设置一个key的值 Get - 查询key的值 GetSet - 设置一个key的值,并返回这个key的旧值 SetNX - 如果key不存在,则设置这个key的值 MGet - 批量查询key的值 MSet - 批量设置key的值 Incr,IncrBy,IncrByFloat - 针对一个key的数值进行递增操作 Decr,DecrBy - 针对一个key的数值进行递减操作 Del - 删除key操作,可以批量删除 Expire - 设置key的过期时间

// List相关操作 LPush - 从列表左边插入数据 LPushX - 跟LPush的区别是,仅当列表存在的时候才插入数据 RPop - 从列表的右边删除第一个数据,并返回删除的数据 RPush - 从列表右边插入数据 RPushX - 跟RPush的区别是,仅当列表存在的时候才插入数据 LPop - 从列表左边删除第一个数据,并返回删除的数据 LLen - 返回列表的大小 LRange - 返回列表的一个范围内的数据,也可以返回全部数据 LRem - 删除列表中的数据 LIndex - 根据索引坐标,查询列表中的数据 LInsert - 在指定位置插入数据

// Hash相关操作 HSet - 根据key和field字段设置,field字段的值 HGet - 根据key和field字段,查询field字段的值 HGetAll - 根据key查询所有字段和值 HIncrBy - 根据key和field字段,累加数值。 HKeys - 根据key返回所有字段名 HLen - 根据key,查询hash的字段数量 HMGet - 根据key和多个字段名,批量查询多个hash字段值 HMSet - 根据key和多个字段名和字段值,批量设置hash字段值 HSetNX - 如果field字段不存在,则设置hash字段值 HDel - 根据key和字段名,删除hash字段,支持批量删除hash字段 HExists - 检测hash字段名是否存在。

// Set相关操作 SAdd - 添加集合元素 SCard - 获取集合元素个数 SIsMember - 判断元素是否在集合中 SMembers - 获取集合中所有的元素 SRem - 删除集合元素 SPop,SPopN - 随机返回集合中的元素,并且删除返回的元素

// SortedSet相关操作 ZAdd - 添加一个或者多个元素到集合,如果元素已经存在则更新分数 ZCard - 返回集合元素个数 ZCount - 统计某个分数范围内的元素个数 ZIncrBy - 增加元素的分数 ZRange,ZRevRange - 返回集合中某个索引范围的元素,根据分数从小到大排序 ZRangeByScore,ZRevRangeByScore - 根据分数范围返回集合元素,元素根据分数从小到大排序,支持分页。 ZRem - 删除集合元素 ZRemRangeByRank - 根据索引范围删除元素 ZRemRangeByScore - 根据分数范围删除元素 ZScore - 查询元素对应的分数 ZRank, ZRevRank - 查询元素的排名

// 发布订阅相关 Subscribe - 订阅channel PSubscribe - 订阅channel支持通配符匹配 Publish - 将信息发送到指定的channel。 PubSubChannels - 查询活跃的channel PubSubNumSub - 查询指定的channel有多少个订阅者

// 事务处理 TxPipeline - 以Pipeline的方式操作事务 Watch - redis乐观锁支持

分布式锁的实现

//////////////////// // 分布式锁的实现 // 基于redis+lua脚本实现 ////////////////////

// 1、排他性 2、防死锁 3、可重入 4、高性能高可用

// SET key value NX PX timeout 当key不存在的时候才设置key的值 // EX [second] 过期时间-秒 PX [millisecond] 过期时间-毫秒 // NX 键不存在的时候才对键进行设置操作 XX 键存在的时候 才对键进行设置操作


const (
	// 如果相等说明是再次获取并更新获取时间 可重入锁
	// 这个value是每个节点随机值 这样就知道是不是某个节点了
	lockCommand = `if redis.call("GET", KEYS[1]) == ARGV[1] then
	redis.call("SET", KEYS[1], "PX", ARGV[2])
	return "OK"
	else
	return redis.call("SET", KEYS[1], ARGV[1], "NX", "PX", ARGV[2])
	end
	`
	delCommand = `if redis.call("GET", KEYS[1]) == ARGV[1] then
    return redis.call("DEL", KEYS[1])
else
    return 0
end`

	randomLen       = 16
	tolerance       = 500
	millisPerSecond = 1000
)

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GetMongoCli

func GetMongoCli() mongoc.Client

func InitMongo

func InitMongo(ctx context.Context, config mongoc.Config) (err error)

Types

type JSON

type JSON json.RawMessage

func (*JSON) Scan

func (j *JSON) Scan(value interface{}) error

实现 sql.Scanner 接口,Scan 将 value 扫描至 Jsonb

func (JSON) Value

func (j JSON) Value() (driver.Value, error)

实现 driver.Valuer 接口,Value 返回 json value

type LevelDBDriver

type LevelDBDriver struct {
	// contains filtered or unexported fields
}

支持按照文件名返回连接

func NewLevelDBDriver

func NewLevelDBDriver(prefix string) (*LevelDBDriver, error)

func (*LevelDBDriver) Close

func (l *LevelDBDriver) Close() error

func (*LevelDBDriver) Get

func (l *LevelDBDriver) Get(dbName, key string) ([]byte, error)

func (*LevelDBDriver) GetArrJson

func (l *LevelDBDriver) GetArrJson(dbName string, key string) ([]map[string]interface{}, error)

func (*LevelDBDriver) GetDB

func (l *LevelDBDriver) GetDB(dbName string) (*goleveldb.DB, error)

func (*LevelDBDriver) GetDBName

func (l *LevelDBDriver) GetDBName(dbName string) string

func (*LevelDBDriver) GetJson

func (l *LevelDBDriver) GetJson(dbName, key string) (map[string]interface{}, error)

func (*LevelDBDriver) GetRangeNum

func (l *LevelDBDriver) GetRangeNum(dbName string, start string, end string) (int, error)

func (*LevelDBDriver) IterAll

func (l *LevelDBDriver) IterAll(dbName string) error

func (*LevelDBDriver) IteratorByPrefix

func (l *LevelDBDriver) IteratorByPrefix(dbName string, prefix string) (map[string][]byte, error)

根据前缀获取key,value

func (*LevelDBDriver) IteratorByRange

func (l *LevelDBDriver) IteratorByRange(dbName string, start, end string) ([]map[string]interface{}, error)

func (*LevelDBDriver) IteratorStrByRange

func (l *LevelDBDriver) IteratorStrByRange(dbName string, start, end string) ([]map[string]string, error)

IteratorStrByRange 按照范围获取key-value

func (*LevelDBDriver) Put

func (l *LevelDBDriver) Put(dbName, key string, value []byte) error

func (*LevelDBDriver) Remove

func (l *LevelDBDriver) Remove(dbName string, start string, end string, nums int) error

Remove 删除给定范围的数据 nums 指定删除的记录条数 TODO: 需要把占位key的逻辑移除出去作为通用的

func (*LevelDBDriver) WriteByArray

func (l *LevelDBDriver) WriteByArray(dbName string, key string, value interface{}) error

写入数据 找给定key判断能否找到 能找到的话按照数组的格式往后添加数据

func (*LevelDBDriver) WriteJson

func (l *LevelDBDriver) WriteJson(dbName string, key string, value interface{}) error

type PostgresDriver

type PostgresDriver struct {
	DB *gorm.DB
}

func (*PostgresDriver) CreateEventTrigger

func (d *PostgresDriver) CreateEventTrigger(sql, triggerName string) error

func (*PostgresDriver) CreateTrigger

func (d *PostgresDriver) CreateTrigger(sql string, triggerName string) error

创建触发器是否成功

func (*PostgresDriver) DeleteTrigger

func (d *PostgresDriver) DeleteTrigger(triggerName string) error

func (*PostgresDriver) GetPrimary

func (d *PostgresDriver) GetPrimary(table interface{}) ([]string, error)

func (*PostgresDriver) GetPrimaryWithName

func (d *PostgresDriver) GetPrimaryWithName(tableName string) ([]string, error)

func (*PostgresDriver) GetTableName

func (d *PostgresDriver) GetTableName(table interface{}) string

func (*PostgresDriver) InitWithDB

func (d *PostgresDriver) InitWithDB(db *gorm.DB) *PostgresDriver

func (*PostgresDriver) ListEventTrigger

func (d *PostgresDriver) ListEventTrigger() map[string]bool

func (*PostgresDriver) ListTrigger

func (d *PostgresDriver) ListTrigger() map[string]bool

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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