123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- package dao
- import (
- "context"
- "fmt"
- "strconv"
- model "go-common/app/interface/main/credit/model"
- "go-common/library/cache/redis"
- )
- const (
- _voteOpIdx = "vo_%d_%d"
- _caseOpIdx = "caseop_"
- )
- func voteIndexKey(cid int64, otype int8) string {
- return fmt.Sprintf(_voteOpIdx, otype, cid)
- }
- func caseIndexKey(cid int64) string {
- return _caseOpIdx + strconv.FormatInt(cid, 10)
- }
- // VoteOpIdxCache get vote opinion index from cache.
- func (d *Dao) VoteOpIdxCache(c context.Context, cid, start, end int64, otype int8) (ids []int64, err error) {
- var (
- key = voteIndexKey(cid, otype)
- conn = d.redis.Get(c)
- )
- defer conn.Close()
- ids, err = redis.Int64s(conn.Do("LRANGE", key, start, end))
- return
- }
- // ExpireVoteIdx expire vote idx.
- func (d *Dao) ExpireVoteIdx(c context.Context, cid int64, otype int8) (ok bool, err error) {
- conn := d.redis.Get(c)
- defer conn.Close()
- ok, err = redis.Bool(conn.Do("EXPIRE", voteIndexKey(cid, otype), d.redisExpire))
- return
- }
- // LenVoteIdx get lenth of vote index.
- func (d *Dao) LenVoteIdx(c context.Context, cid int64, otype int8) (count int, err error) {
- conn := d.redis.Get(c)
- defer conn.Close()
- count, err = redis.Int(conn.Do("LLEN", voteIndexKey(cid, otype)))
- return
- }
- // CaseOpIdxCache get case opinion index from cache.
- func (d *Dao) CaseOpIdxCache(c context.Context, cid, start, end int64) (ids []int64, err error) {
- var (
- key = caseIndexKey(cid)
- conn = d.redis.Get(c)
- )
- defer conn.Close()
- ids, err = redis.Int64s(conn.Do("ZREVRANGE", key, start, end))
- return
- }
- // LenCaseIdx get lenth of vote index.
- func (d *Dao) LenCaseIdx(c context.Context, cid int64) (count int, err error) {
- conn := d.redis.Get(c)
- defer conn.Close()
- count, err = redis.Int(conn.Do("ZCARD", caseIndexKey(cid)))
- return
- }
- // ExpireCaseIdx expire case index cache.
- func (d *Dao) ExpireCaseIdx(c context.Context, cid int64) (ok bool, err error) {
- conn := d.redis.Get(c)
- defer conn.Close()
- ok, err = redis.Bool(conn.Do("EXPIRE", caseIndexKey(cid), d.redisExpire))
- return
- }
- // LoadVoteOpIdxs load vote opinion index into cache.
- func (d *Dao) LoadVoteOpIdxs(c context.Context, cid int64, otype int8, idx []int64) (err error) {
- var (
- ok bool
- key = voteIndexKey(cid, otype)
- conn = d.redis.Get(c)
- )
- defer conn.Close()
- if ok, err = redis.Bool(conn.Do("EXPIRE", key, d.redisExpire)); ok {
- return
- }
- for _, id := range idx {
- if err = conn.Send("LPUSH", key, id); err != nil {
- return
- }
- }
- if err = conn.Send("EXPIRE", key, d.redisExpire); err != nil {
- return
- }
- if err = conn.Flush(); err != nil {
- return
- }
- for i := 0; i < len(idx)+1; i++ {
- _, err = conn.Receive()
- }
- return
- }
- // LoadCaseIdxs load case opinion index into redis.
- func (d *Dao) LoadCaseIdxs(c context.Context, cid int64, ops []*model.Opinion) (err error) {
- key := caseIndexKey(cid)
- conn := d.redis.Get(c)
- defer conn.Close()
- for _, op := range ops {
- if err = conn.Send("ZADD", key, op.Like-op.Hate, op.OpID); err != nil {
- return
- }
- }
- if err = conn.Send("EXPIRE", key, d.redisExpire); err != nil {
- return
- }
- if err = conn.Flush(); err != nil {
- return
- }
- for i := 0; i < len(ops)+1; i++ {
- _, err = conn.Receive()
- }
- return
- }
- // DelCaseIdx DEL case opinion idx.
- func (d *Dao) DelCaseIdx(c context.Context, cid int64) (err error) {
- conn := d.redis.Get(c)
- defer conn.Close()
- _, err = conn.Do("DEL", caseIndexKey(cid))
- return
- }
- // DelVoteIdx DEL case opinion idx.
- func (d *Dao) DelVoteIdx(c context.Context, cid int64) (err error) {
- conn := d.redis.Get(c)
- defer conn.Close()
- if err = conn.Send("DEL", voteIndexKey(cid, 1)); err != nil {
- return
- }
- if err = conn.Send("DEL", voteIndexKey(cid, 2)); err != nil {
- return
- }
- conn.Flush()
- for i := 0; i < 2; i++ {
- conn.Receive()
- }
- return
- }
|