heel use iterator to multi find and delete

This commit is contained in:
siddontang 2014-06-20 10:12:50 +08:00
parent c5af770387
commit 9e09e607c8
2 changed files with 7 additions and 5 deletions

View File

@ -252,7 +252,7 @@ func (db *DB) HMget(key []byte, args ...[]byte) ([]interface{}, error) {
return r, nil
}
func (db *DB) HDel(key []byte, args [][]byte) (int64, error) {
func (db *DB) HDel(key []byte, args ...[]byte) (int64, error) {
t := db.hashTx
var ek []byte
@ -262,6 +262,9 @@ func (db *DB) HDel(key []byte, args [][]byte) (int64, error) {
t.Lock()
defer t.Unlock()
it := db.db.NewIterator()
defer it.Close()
var num int64 = 0
for i := 0; i < len(args); i++ {
if err := checkHashKFSize(key, args[i]); err != nil {
@ -270,9 +273,8 @@ func (db *DB) HDel(key []byte, args [][]byte) (int64, error) {
ek = db.hEncodeHashKey(key, args[i])
if v, err = db.db.Get(ek); err != nil {
return 0, err
} else if v == nil {
v = it.Find(ek)
if v == nil {
continue
} else {
num++

View File

@ -59,7 +59,7 @@ func hdelCommand(c *client) error {
return ErrCmdParams
}
if n, err := c.db.HDel(args[0], args[1:]); err != nil {
if n, err := c.db.HDel(args[0], args[1:]...); err != nil {
return err
} else {
c.writeInteger(n)