hashchange.go 610 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package rq
  2. import (
  3. "math/rand"
  4. "zero/core/hash"
  5. )
  6. type HashChange struct {
  7. id int64
  8. oldHash *hash.ConsistentHash
  9. newHash *hash.ConsistentHash
  10. }
  11. func NewHashChange(oldHash, newHash *hash.ConsistentHash) HashChange {
  12. return HashChange{
  13. id: rand.Int63(),
  14. oldHash: oldHash,
  15. newHash: newHash,
  16. }
  17. }
  18. func (hc HashChange) GetId() int64 {
  19. return hc.id
  20. }
  21. func (hc HashChange) ShallEvict(key interface{}) bool {
  22. oldTarget, oldOk := hc.oldHash.Get(key)
  23. if !oldOk {
  24. return false
  25. }
  26. newTarget, newOk := hc.newHash.Get(key)
  27. if !newOk {
  28. return false
  29. }
  30. return oldTarget != newTarget
  31. }