Exemple #1
0
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
}
Exemple #2
0
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
}
Exemple #3
0
func (db *DB) KvDel(keys ...[]byte) *skv.Reply {

	for k, v := range keys {
		keys[k] = skv.RawNsKeyConcat(skv.NsKvEntry, v)
	}

	return db.RawDel(keys...)
}
Exemple #4
0
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
}
Exemple #5
0
func (db *DB) KvIncrby(key []byte, step int64) *skv.Reply {
	return db.RawIncrby(skv.RawNsKeyConcat(skv.NsKvEntry, key), step)
}
Exemple #6
0
func (db *DB) KvPutJson(key []byte, value interface{}, ttl int64) *skv.Reply {
	return db._raw_put_json(skv.RawNsKeyConcat(skv.NsKvEntry, key), value, ttl)
}
Exemple #7
0
func (db *DB) KvPut(key, value []byte, ttl int64) *skv.Reply {
	return db.RawPut(skv.RawNsKeyConcat(skv.NsKvEntry, key), value, ttl)
}
Exemple #8
0
func (db *DB) KvGet(key []byte) *skv.Reply {
	return db.RawGet(skv.RawNsKeyConcat(skv.NsKvEntry, key))
}