| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- package redis
- import (
- "github.com/gomodule/redigo/redis"
- "bet24.com/log"
- "strconv"
- )
- type Score_member struct {
- Score string
- Member string
- }
- //执行一个有序zset插入
- func Zset_ZAdd(key string, score int, member string, expire int) bool {
- rc := RedisClient.Get()
- if rc == nil {
- log.Release("Zset_ZAdd no redis connection")
- return false
- }
- defer rc.Close()
- _, err := rc.Do("ZADD", key, score, member)
- if err != nil {
- log.Release("Zset_ZAdd key=%v score=%v memeber=%v expire=%v err=%v", key, score, member, expire, err)
- return false
- }
- if expire > 0 {
- rc.Do("expire", key, expire)
- }
- return true
- }
- func Zset_ZInc(key string, score int, member string) bool {
- rc := RedisClient.Get()
- if rc == nil {
- log.Release("Zset_ZAdd no redis connection")
- return false
- }
- defer rc.Close()
- _, err := rc.Do("ZINCRBY", key, score, member)
- if err != nil {
- log.Release("Zset_ZInc key=%v score=%v member=%v err=%v", key, score, member, err)
- return false
- }
- return true
- }
- func Zset_ZRem(key string, member string) bool {
- rc := RedisClient.Get()
- if rc == nil {
- log.Release("Zset_ZRem no redis connection")
- return false
- }
- defer rc.Close()
- _, err := rc.Do("ZREM", key, member)
- if err != nil {
- log.Release("ZREM key=%v member=%v err=%v", key, member, err)
- return false
- }
- return true
- }
- func Zset_ZScore(key string, member string) int {
- rc := RedisClient.Get()
- if rc == nil {
- log.Release("Zset_ZAdd no redis connection")
- return 0
- }
- defer rc.Close()
- r, err := redis.String(rc.Do("ZSCORE", key, member))
- if err != nil {
- log.Debug("%v", err)
- return 0
- }
- ri, e := strconv.Atoi(r)
- if e != nil {
- log.Debug("%v", e)
- return 0
- }
- return ri
- }
- //读取指定zset
- func Zset_ZRange(key string, start, stop int, desc bool, withScore bool) ([]Score_member, bool) {
- rc := RedisClient.Get()
- if rc == nil {
- log.Release("Zset_ZRange no redis connection")
- return nil, false
- }
- defer rc.Close()
- cmd := "ZRANGE"
- if desc {
- cmd = "ZREVRANGE"
- }
- var rows []string
- var err error
- if withScore {
- rows, err = redis.Strings(rc.Do(cmd, key, start, stop, "WITHSCORES"))
- } else {
- rows, err = redis.Strings(rc.Do(cmd, key, start, stop))
- }
- if err != nil {
- log.Release("Zset_ZRange key=%v start=%v stop=%v desc=%v withScore=%v err=%v", key, start, stop, desc, withScore, err)
- return nil, false
- }
- rowsLen := len(rows) / 2
- if rowsLen <= 0 {
- log.Debug("Zset_ZRange no data")
- return nil, false
- }
- score_member_list := make([]Score_member, rowsLen)
- for i := 0; i < len(rows)-1; i += 2 {
- score_member_list[i/2].Member = string(rows[i])
- score_member_list[i/2].Score = string(rows[i+1])
- }
- return score_member_list, true
- }
- func Zset_ZRemByScore(key string, min, max int) {
- rc := RedisClient.Get()
- if rc == nil {
- log.Release("Zset_ZRange no redis connection")
- return
- }
- defer rc.Close()
- rc.Do("ZREMRANGEBYSCORE", key, min, max)
- }
|