class
RedisOrderedDict (collections.MutableMapping):
def
__ init__ (
self
, r, name):
self
._ r
=
r
self
._name
=
encode_key (имя)
def
__ iter __ (
self
return
iter
self
. items())
def
__ len __ (
self
):
return
self
._r.zcard (
self
._ name)
def
__ getitem __ (
self
, key):
return
self
._ r.zscore (
self
._name, encode_key (ключ))
def
__ setitem __ (
self
, ключ, оценка):
self
._r.zadd (
self
._ name, encode_key (key), score)
def
__ delitem __ (
self
, ключ):
self
._ r.zrem (
self
._ name, e ncode_key (key))
def
keys (
self
, start
=
0
, end
=
-
1
):
# мы используем zrevrange для сортировки ключей
# по значению вместо
самый низкий
return
self
._ r.zrevrange (
self
._ name, start, end)
def
значения (
self
, start
=
0
, end
=
-
1
):
return
[v
for
( k, v)
in
self
. элементы (начало
=
начало, конец
=
end)]
def
items ( co de >
self
, start
=
0
, end
=
-
1
):
return
self
._ r.zrevrange (
self
._ name, start, end, withscores
=
True
)
def
get(
self
, key, default
=
0
):
return
self
[key]
или
по умолчанию
def
iteritems (
self
):
return
iter
(
self
)
def
прозрачный (
self
):
self
._ r.delete (
self
._ name)
Код: создайте экземпляр RedisOrderedDict, передав соединение с Redis и уникальное имя
from
redis
import
Redis
from
rediscollections
import
RedisOrderedDict
r
=
Redis ()
стержень
=
RedisOrderedDict (r,
`test`
rod.get (
` bar`
)
стержень [
`bar`
]
=
5.2
print
(rod [
`bar`
])
print
(
len
(стержень))
print
(rod.items ())
стержень. очистить ()
Выход:
0 5.2000000000000002 1 [(b`bar`, 5.2)]
Большая часть кода может выглядеть похожей ar в RedisHashMap, чего и следовало ожидать, поскольку оба они расширяют коллекции . Основное отличие состоит в том, что RedisOrderedSet упорядочивает ключи по значениям с плавающей запятой и поэтому не подходит для произвольного хранения значений ключей, таких как RedisHashMap .
Наброски, объясняющие каждый ключевой метод и то, как они работают с Redis:
- __len __ (): команда zcard используется для получения количества элементов в упорядоченный набор.
- __getitem __ (): использует команду zscore для получения оценки ключа и возвращает 0, если ключ не существует.
- __ setitem __ (): эта команда использует команду zadd для добавления ключа в упорядоченный набор с заданной оценкой или обновления оценки, если ключ уже существует.
- __delitem __(): Команда zrem используется для удаления ключа из упорядоченного набора.
- keys(): Команда zrevrange используется для получения всех ключей в упорядоченном наборе, отсортированных по наивысшему баллу. Для более эффективного получения фрагмента упорядоченных ключей требуются два необязательных аргумента ключевого слова, start и end.