driver

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: 16 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

View Source
const (
	RedisStr     actionType = iota // 字符串类型
	RedisList                      // 列表类型
	RedisHash                      // 哈希类型
	RedisSortSet                   // 排序集合类型
	RedisSet                       // 集合类型
)

Variables

View Source
var ErrTooLargeOffset = errors.New("too large offset")

ErrTooLargeOffset indicates the offset is too large in bitset.

Functions

func Hash

func Hash(data []byte) uint64

Hash returns the hash value of data.

Types

type BloomFilter

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

布隆过滤器结构体

func (*BloomFilter) Add

func (f *BloomFilter) Add(data []byte) error

func (*BloomFilter) Exists

func (f *BloomFilter) Exists(data []byte) (bool, error)

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

type RedisConfig

type RedisConfig struct {
	Addr     string
	Password string
	DB       int // 0 default DB

}

func (RedisConfig) DSN

func (c RedisConfig) DSN() interface{}

type RedisDriver

type RedisDriver struct {
	Client *redis.Client
	// contains filtered or unexported fields
}

func NewRedisDriver

func NewRedisDriver(config *RedisConfig) (*RedisDriver, error)

NewRedisDriver driver构造函数

func (*RedisDriver) BasicGet

func (d *RedisDriver) BasicGet(key string) interface{}

基本数据类型的基本获取

func (*RedisDriver) BasicSet

func (d *RedisDriver) BasicSet(key string, value interface{}, expir time.Duration, typ actionType) (e error)

BasicSet 基本数据类型的添加元素

func (*RedisDriver) NewBitSet

func (d *RedisDriver) NewBitSet(key string, bits uint) *redisBitSet

获取bitset数据结构

func (*RedisDriver) NewBloomFilter

func (d *RedisDriver) NewBloomFilter(bits uint, key string) *BloomFilter

布隆过滤器的构造函数

func (*RedisDriver) NewLock

func (d *RedisDriver) NewLock(key string) *RedisLock

获取分布式锁实例

func (*RedisDriver) Ping

func (d *RedisDriver) Ping() bool

Ping 测试连通性

type RedisLock

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

func (*RedisLock) Acquire

func (rl *RedisLock) Acquire() (bool, error)

获取分布式锁

func (*RedisLock) Release

func (rl *RedisLock) Release() (bool, error)

释放获取到的分布式锁

func (*RedisLock) SetExpire

func (rl *RedisLock) SetExpire(seconds int)

Jump to

Keyboard shortcuts

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