Class: RedisCounters::UniqueValuesLists::Blocking

Inherits:
Base show all
Defined in:
lib/redis_counters/unique_values_lists/blocking.rb

Overview

Список уникальных значений, на основе механизма оптимистических блокировок.

смотри Optimistic locking using check-and-set: redis.io/topics/transactions

Особенности:

* Значения сохраняет в партициях;
* Ведет список партиций;
* Полностью транзакционен.

Direct Known Subclasses

Expirable

Constant Summary collapse

PARTITIONS_LIST_POSTFIX =
:partitions

Constants inherited from BaseCounter

BaseCounter::KEY_DELIMITER, BaseCounter::VALUE_DELIMITER

Instance Attribute Summary

Attributes inherited from BaseCounter

#options, #params, #redis

Instance Method Summary collapse

Methods included from ClusterizeAndPartitionize

#data, #delete_all!, #delete_all_direct!, #delete_partitions!, #partitions

Methods inherited from BaseCounter

create, #initialize, #name, #process

Constructor Details

This class inherits a constructor from RedisCounters::BaseCounter

Instance Method Details

#delete_partition_direct!(params = {}, write_session = redis) ⇒ Object

Public: Нетранзакционно удаляет данные конкретной конечной партиции.

params - Hash - хеш параметров, определяющий кластер и партицию. write_session - Redis - соединение с Redis, в рамках которого

будет производится удаление (опционально).
По умолчанию - основное соединение счетчика.

Если передан блок, то вызывает блок, после удаления всех данных, в транзакции.

Returns Nothing.



43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/redis_counters/unique_values_lists/blocking.rb', line 43

def delete_partition_direct!(params = {}, write_session = redis)
  super(params, write_session)

  # удаляем партицию из списка
  return unless use_partitions?

  cluster = ::RedisCounters::Cluster.new(self, params).params
  partition = ::RedisCounters::Partition.new(self, params).params(:only_leaf => true)

  partition = partition.flatten.join(key_delimiter)
  write_session.lrem(partitions_list_key(cluster), 0, partition)
end

#has_value?(params) ⇒ Boolean

Public: Проверяет существует ли заданное значение.

params - Hash - параметры кластера и значения.

Returns Boolean.

Returns:

  • (Boolean)


26
27
28
29
30
# File 'lib/redis_counters/unique_values_lists/blocking.rb', line 26

def has_value?(params)
  set_params(params)
  reset_partitions_cache
  value_already_exists?
end