func (db *DB) KvScan(cursor, end []byte, limit uint32) *skv.Reply { rpl := db.RawScan(skv.RawNsKeyConcat(skv.NsKvEntry, cursor), skv.RawNsKeyConcat(skv.NsKvEntry, end), limit) if len(rpl.Data) > 0 && len(rpl.Data)%2 == 0 { for i := 0; i < len(rpl.Data); i += 2 { rpl.Data[i] = rpl.Data[i][1:] } } return rpl }
func (db *DB) _raw_ssttlat_put(ns byte, key []byte, ttlat uint64) bool { if ttlat == 0 { return true } key = skv.RawNsKeyConcat(ns, key) batch := new(leveldb.Batch) // if prev := db.RawGet(skv.RawTtlEntry(key)); prev.Status == skv.ReplyOK { if prev_ttlat := dbutil.BytesToUint64(prev.Bytes()); prev_ttlat != ttlat { batch.Delete(skv.RawTtlQueue(key, prev_ttlat)) } } // batch.Put(skv.RawTtlQueue(key, ttlat), []byte{}) // batch.Put(skv.RawTtlEntry(key), dbutil.Uint64ToBytes(ttlat)) if err := db.ldb.Write(batch, nil); err != nil { return false } return true }
func (db *DB) KvDel(keys ...[]byte) *skv.Reply { for k, v := range keys { keys[k] = skv.RawNsKeyConcat(skv.NsKvEntry, v) } return db.RawDel(keys...) }
func (db *DB) _raw_ssttl_get(ns byte, key []byte) *skv.Reply { key = skv.RawNsKeyConcat(ns, key) rpl, ttl := skv.NewReply(""), int64(0) if ttlat := dbutil.BytesToUint64(db.RawGet(skv.RawTtlEntry(key)).Bytes()); ttlat > 0 { ttl = (dbutil.MetaTimeParse(ttlat).UnixNano() - time.Now().UTC().UnixNano()) / 1e6 } if ttl < 0 { ttl = 0 } rpl.Data = append(rpl.Data, []byte(strconv.FormatInt(ttl, 10))) return rpl }
func (db *DB) KvIncrby(key []byte, step int64) *skv.Reply { return db.RawIncrby(skv.RawNsKeyConcat(skv.NsKvEntry, key), step) }
func (db *DB) KvPutJson(key []byte, value interface{}, ttl int64) *skv.Reply { return db._raw_put_json(skv.RawNsKeyConcat(skv.NsKvEntry, key), value, ttl) }
func (db *DB) KvPut(key, value []byte, ttl int64) *skv.Reply { return db.RawPut(skv.RawNsKeyConcat(skv.NsKvEntry, key), value, ttl) }
func (db *DB) KvGet(key []byte) *skv.Reply { return db.RawGet(skv.RawNsKeyConcat(skv.NsKvEntry, key)) }