1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| func (db *RedisDB) (key string, val interface{}, versionKey string, versionVal int, versionExpire int) (err error) { if versionExpire == 0 { versionExpire = 100 } storeValue, err := db.getStoreValue(val) if err != nil { return }
conn := db.Option.Pool.Get() defer conn.Close() if err = conn.Err(); err != nil { return err }
script := ` local version = redis.call("INCR", KEYS[2]) if version == 1 then redis.call("EXPIRE", KEYS[2], ARGV[3]) end;
if tostring(version) ~= ARGV[2] then return {-1, version} end; return redis.call("SET", KEYS[1], ARGV[1]) ` getScript := redis.NewScript(3, script) res, err := redis.String(getScript.Do(conn, key, versionKey, "expire", storeValue, versionVal, versionExpire))
if err != nil { utils.Error(err) return } if res == "-1" { }redis return }
|