2015-08-02 6 views
1

Jedis имеет метод hmset, который позволяет вам установить карту полей и их значений по определенному ключу.Jedis HMSET map порядок вставки

Я использую метод так:

Map<String, String> map = new LinkedHashMap<String, String>(); 

       // General player data 
       map.put("name", player.getName()); 
       map.put("ip", player.getAddress().getAddress().getHostAddress()); 
       map.put("rank", "none"); 
       map.put("tokens", "0"); 
       map.put("coins", "0"); 

       // Arsenal player statistics 
       map.put("ar_score", "0"); 
       map.put("ar_gameswon", "0"); 
       map.put("ar_gameslost", "0"); 
       map.put("ar_kills", "0"); 
       map.put("ar_deaths", "0"); 

       pipeline.hmset("uuid:" + uuid, map); 

       pipeline.sync(); 
       core.redis.getJedisPool().returnResourceObject(jedis); 

Я решил использовать LinkedHashMap, чтобы сохранить порядок вставки - тем не менее, если смотреть на базу данных, она до сих пор путает порядок.

Кто-нибудь знает, как вставить его в базу данных, не нарушая порядок?

спасибо.

ответ

4

Клиент Jedis на основе String transcodes the strings с использованием временного HashMap, поэтому он убивает ваш заказ. BinaryClient iterates over the Map напрямую и сохраняет заказ.

Клиент lettuce хранит порядок вашей карты в любом случае.

В качестве альтернативы, установите значения по одному с помощью HSET hash key value

НТН, Марк

+0

Благодарим за помощь. – Indy

0

Дайте попробовать на основе базы Redis для Java - Redisson. Она хранит записи карт в порядке вставки во время итерации с использованием любого кодека (Jackson JSON, Avro, Smile, CBOR, MsgPack, Kryo, FST, LZ4, Snappy и JDK Serialization).

 Смежные вопросы

  • Нет связанных вопросов^_^