Class: RedisCounters::UniqueValuesLists::Blocking
- Inherits:
-
Base
- Object
- BaseCounter
- Base
- RedisCounters::UniqueValuesLists::Blocking
- Defined in:
- lib/redis_counters/unique_values_lists/blocking.rb
Overview
Список уникальных значений, на основе механизма оптимистических блокировок.
смотри Optimistic locking using check-and-set: redis.io/topics/transactions
Особенности:
* Значения сохраняет в партициях;
* Ведет список партиций;
* Полностью транзакционен.
Direct Known Subclasses
Constant Summary collapse
- PARTITIONS_LIST_POSTFIX =
:partitions
Constants inherited from BaseCounter
BaseCounter::KEY_DELIMITER, BaseCounter::VALUE_DELIMITER
Instance Attribute Summary
Attributes inherited from BaseCounter
Instance Method Summary collapse
-
#delete_partition_direct!(params = {}, write_session = redis) ⇒ Object
Public: Нетранзакционно удаляет данные конкретной конечной партиции.
-
#has_value?(params) ⇒ Boolean
Public: Проверяет существует ли заданное значение.
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.
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 |