Запустите контейнер redis в отдельном режиме:
docker run -d redis
Запустите redis-cli
для него:
docker exec -it e0c061a5700bfa400f8f24b redis-cli
где e0c061a5700bfa400f8f24b
- идентификатор контейнера.
Согласно документации:
Чтобы запустить контейнер в отдельном режиме, вы используете -d = true или просто опция -d. Конструктивно контейнеры запускались в отдельном режиме, когда выход из корневого процесса, использованного для запуска контейнера, завершился, если вы не укажете опцию --rm. Если вы используете -d с --rm, контейнер удаляется при выходе или при выходе демона, в зависимости от того, что произойдет раньше.
blockquote>.
- интерактивный, -i Держать STDIN открытым, даже если он не подключен
- tty, -t Выделить псевдо-TTY
blockquote>
Нет никаких собственных ассоциативных массивов в JavaScript, только объекты. Объекты имеют свойства. Названия свойств всегда являются строками: даже числовые индексы массивов будут преобразованы в строки, прежде чем 'волшебство массива' произойдет.
При поиске ассоциативных массивов с произвольными ключами посмотрите здесь.
Вы говорите об объектах JavaScript (JSON)?
Спецификация говорит, что ключи должны быть строками http://json.org/.
Но интерпретатор JavaScript позволяет обоим {"key": "val"}
и {key: "val"}
Я реализовал Javascript HashMap, код которого можно получить из http://github.com/lambder/HashMapJS/tree/master
Ключи и значения могут быть произвольными объекты javascript. Нет никаких требований к объектам, используемым в качестве ключей или значений.
Механизм тривиален. Для каждого ключа создается уникальный идентификатор (для каждого экземпляра HashMap). Этот идентификатор вводится ключевому объекту под именем поля с высокой вероятностью столкновения;)
Этот идентификатор затем используется для ввода базового стандартного объекта ассоциации javascript для запекания.
Вот код:
/*
=====================================================================
@license MIT
@author Lambder
@copyright 2009 Lambder.
@end
=====================================================================
*/
var HashMap = function() {
this.initialize();
}
HashMap.prototype = {
hashkey_prefix: "<#HashMapHashkeyPerfix>",
hashcode_field: "<#HashMapHashkeyPerfix>",
initialize: function() {
this.backing_hash = {};
this.code = 0;
},
/*
maps value to key returning previous assocciation
*/
put: function(key, value) {
var prev;
if (key && value) {
var hashCode = key[this.hashcode_field];
if (hashCode) {
prev = this.backing_hash[hashCode];
} else {
this.code += 1;
hashCode = this.hashkey_prefix + this.code;
key[this.hashcode_field] = hashCode;
}
this.backing_hash[hashCode] = value;
}
return prev;
},
/*
returns value associated with given key
*/
get: function(key) {
var value;
if (key) {
var hashCode = key[this.hashcode_field];
if (hashCode) {
value = this.backing_hash[hashCode];
}
}
return value;
},
/*
deletes association by given key.
Returns true if the assocciation existed, false otherwise
*/
del: function(key) {
var success = false;
if (key) {
var hashCode = key[this.hashcode_field];
if (hashCode) {
var prev = this.backing_hash[hashCode];
this.backing_hash[hashCode] = undefined;
if(prev !== undefined)
success = true;
}
}
return success;
}
}
//// Usage
// creation
var my_map = new HashMap();
// insertion
var a_key = {};
var a_value = {struct: "structA"};
var b_key = {};
var b_value = {struct: "structB"};
var c_key = {};
var c_value = {struct: "structC"};
my_map.put(a_key, a_value);
my_map.put(b_key, b_value);
var prev_b = my_map.put(b_key, c_value);
// retrieval
if(my_map.get(a_key) !== a_value){
throw("fail1")
}
if(my_map.get(b_key) !== c_value){
throw("fail2")
}
if(prev_b !== b_value){
throw("fail3")
}
// deletion
var a_existed = my_map.del(a_key);
var c_existed = my_map.del(c_key);
var a2_existed = my_map.del(a_key);
if(a_existed !== true){
throw("fail4")
}
if(c_existed !== false){
throw("fail5")
}
if(a2_existed !== false){
throw("fail6")
}
Bon Appétit, Лэмбдер