Получить несколько ключей / значений в Redis с Python

[] - массив. Этот массив не используется вообще.

Он помещается на страницу, потому что использование массива дает вам доступ к прототипам массива, например .forEach.

Это происходит быстрее, чем набирать Array.prototype.forEach.call(...);

Далее forEach - это функция, которая принимает функцию как вход ...

[1,2,3].forEach(function (num) { console.log(num); });

... и для каждого элемента из this (где this например, length, и вы можете получить доступ к его частям, например this[1]), он будет передавать три вещи:

  1. элемент в массиве
  2. индекс элемента (третий элемент пройдет 2)
  3. ссылка на массив

Наконец, .call является прототипом, функции которого имеют (это функция, вызываемая другими функциями). .call примет свой первый аргумент и заменит this внутри регулярной функции тем, что вы передали call, поскольку первый аргумент (undefined или null будет использовать window в повседневной JS или будет независимо от того, что вы прошли, если в «строгом режиме»). Остальные аргументы будут переданы исходной функции.

[1, 2, 3].forEach.call(["a", "b", "c"], function (item, i, arr) {
    console.log(i + ": " + item);
});
// 0: "a"
// 1: "b"
// 2: "c"

Поэтому вы создаете быстрый способ вызова функции forEach, и вы меняете this из пустого массива на список всех тегов <a> и

EDIT

Логическое заключение / очистка

Ниже приведена ссылка на статью. что мы отказываемся от попыток функционального программирования и каждый раз придерживаемся ручного, встроенного цикла, потому что это решение хакерское и неприглядное.

Я бы сказал, что, хотя .forEach менее полезен, чем его коллеги, .map(transformer), .filter(predicate), .reduce(combiner, initialValue), он по-прежнему служит целям, когда все, что вы действительно хотите сделать, это изменить внешний (не массив), n-раз, имея доступ к arr[i] или i.

Итак, как мы имеем дело с несоответствием, поскольку Девиз явно талантливый и знающий парень, и я хотел бы представить, что я знаю, что я делаю / куда я иду (время от времени ... ... иногда это начальное обучение)?

Ответ на самом деле довольно просто, и что-то вроде дяди Боба и сэра Крокфорда было бы как facepalm из-за недосмотра:

очистить его .

function toArray (arrLike) { // or asArray(), or array(), or *whatever*
  return [].slice.call(arrLike);
}

var checked = toArray(checkboxes).filter(isChecked);
checked.forEach(listValues);

Теперь, если вы задаетесь вопросом, нужно ли вам это делать самому, ответ, возможно, не будет ... Это то, что делает ... ... каждая (?) библиотека с функциями более высокого порядка в наши дни. Если вы используете lodash или подчеркивание или даже jQuery, все они собираются взять набор элементов и выполнить действие n раз. Если вы не используете такую ​​вещь, то обязательно напишите свой.

lib.array = (arrLike, start, end) => [].slice.call(arrLike, start, end);
lib.extend = function (subject) {
  var others = lib.array(arguments, 1);
  return others.reduce(appendKeys, subject);
};

Обновление для ES6 (ES2015) и Beyond

Не только slice( ) / array( ) / и т. д., чтобы облегчить жизнь людям, которые хотят использовать списки, так же, как они используют массивы (как и должны), но для людей, у которых есть роскошь работы в браузерах ES6 + относительно близких будущее или «трансбинирование» в Вавилоне сегодня, у вас есть встроенные языковые функции, которые делают ненужным этот тип вещей.

function countArgs (...allArgs) {
  return allArgs.length;
}

function logArgs (...allArgs) {
  return allArgs.forEach(arg => console.log(arg));
}

function extend (subject, ...others) { /* return ... */ }


var nodeArray = [ ...nodeList1, ...nodeList2 ];

Супер-чистый и очень полезный. Найдите операторы Rest и Spread ; попробуйте их на сайте BabelJS; если ваш технический стек в порядке, используйте их в производстве с Babel и шаг сборки.


Нет никакой веской причины, чтобы не использовать преобразование из не-массива в массив ... ... просто не делайте беспорядок своего кода, ничего не делая , но вставляя ту же уродливую линию, везде.

1
задан Joe 16 January 2019 в 14:06
поделиться

1 ответ

Вы можете использовать метод mget для получения значений нескольких ключей за один вызов (возвращаемых в том же порядке, что и ключи):

data = r.mget(['123', '456'])

Для поиска ключей по определенному шаблону, используйте метод scan:

cursor, keys = r.scan(match='123*')
data = r.mget(keys)

(Документация: https://redis-py.readthedocs.io/en/latest/ )

0
ответ дан Anna Krogager 16 January 2019 в 14:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: