func (db *DB) incr(key []byte, delta int64) (int64, error) { if err := checkKeySize(key); err != nil { return 0, err } var err error key = db.encodeKVKey(key) t := db.kvBatch t.Lock() defer t.Unlock() var n int64 n, err = StrInt64(db.bucket.Get(key)) if err != nil { return 0, err } n += delta t.Put(key, num.FormatInt64ToSlice(n)) err = t.Commit() return n, err }
func (db *DB) HIncrBy(key []byte, field []byte, delta int64) (int64, error) { if err := checkHashKFSize(key, field); err != nil { return 0, err } t := db.hashBatch var ek []byte var err error t.Lock() defer t.Unlock() ek = db.hEncodeHashKey(key, field) var n int64 = 0 if n, err = StrInt64(db.bucket.Get(ek)); err != nil { return 0, err } n += delta _, err = db.hSetItem(key, field, num.FormatInt64ToSlice(n)) if err != nil { return 0, err } err = t.Commit() return n, err }
func timeCommand(c *client) error { if len(c.args) != 0 { return ErrCmdParams } t := time.Now() //seconds s := t.Unix() n := t.UnixNano() //micro seconds m := (n - s*1e9) / 1e3 ay := []interface{}{ num.FormatInt64ToSlice(s), num.FormatInt64ToSlice(m), } c.resp.writeArray(ay) return nil }
// XZSCAN key cursor [MATCH match] [COUNT count] [ASC|DESC] func xzscanCommand(c *client) error { args := c.args if len(args) < 2 { return ErrCmdParams } key := args[0] cursor, match, count, desc, err := parseScanArgs(args[1:]) if err != nil { return err } var ay []ledis.ScorePair if !desc { ay, err = c.db.ZScan(key, cursor, count, false, match) } else { ay, err = c.db.ZRevScan(key, cursor, count, false, match) } if err != nil { return err } data := make([]interface{}, 2) if len(ay) < count { data[0] = []byte("") } else { data[0] = ay[len(ay)-1].Member } vv := make([][]byte, 0, len(ay)*2) for _, v := range ay { vv = append(vv, v.Member, num.FormatInt64ToSlice(v.Score)) } data[1] = vv c.resp.writeArray(data) return nil }
func zscoreCommand(c *client) error { args := c.args if len(args) != 2 { return ErrCmdParams } if s, err := c.db.ZScore(args[0], args[1]); err != nil { if err == ledis.ErrScoreMiss { c.resp.writeBulk(nil) } else { return err } } else { c.resp.writeBulk(num.FormatInt64ToSlice(s)) } return nil }
func zincrbyCommand(c *client) error { args := c.args if len(args) != 3 { return ErrCmdParams } key := args[0] delta, err := ledis.StrInt64(args[1], nil) if err != nil { return ErrValue } v, err := c.db.ZIncrBy(key, delta, args[2]) if err == nil { c.resp.writeBulk(num.FormatInt64ToSlice(v)) } return err }
func (w *luaWriter) writeScorePairArray(lst []ledis.ScorePair, withScores bool) { if lst == nil { w.l.PushBoolean(false) return } if withScores { w.l.CreateTable(len(lst)*2, 0) for i, v := range lst { w.l.PushString(hack.String(v.Member)) w.l.RawSeti(-2, 2*i+1) w.l.PushString(hack.String(num.FormatInt64ToSlice(v.Score))) w.l.RawSeti(-2, 2*i+2) } } else { w.l.CreateTable(len(lst), 0) for i, v := range lst { w.l.PushString(hack.String(v.Member)) w.l.RawSeti(-2, i+1) } } }
func (w *respWriter) writeScorePairArray(lst []ledis.ScorePair, withScores bool) { w.buff.WriteByte('*') if lst == nil { w.buff.Write(NullArray) w.buff.Write(Delims) } else { if withScores { w.buff.Write(hack.Slice(strconv.Itoa(len(lst) * 2))) w.buff.Write(Delims) } else { w.buff.Write(hack.Slice(strconv.Itoa(len(lst)))) w.buff.Write(Delims) } for i := 0; i < len(lst); i++ { w.writeBulk(lst[i].Member) if withScores { w.writeBulk(num.FormatInt64ToSlice(lst[i].Score)) } } } }
func (w *respWriter) writeInteger(n int64) { w.buff.WriteByte(':') w.buff.Write(num.FormatInt64ToSlice(n)) w.buff.Write(Delims) }