Jedis HMSET地图插入顺序

时间:2015-08-02 00:33:49

标签: java redis linkedhashmap jedis

Jedis有一个hmset方法,允许您在特定键上设置字段及其值的映射。

我用这种方法:

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来保留插入顺序 - 但是,在查看数据库时,它仍然会弄乱订单。

有没有人知道如何在不搞乱订单的情况下将其插入数据库?

谢谢。

2 个答案:

答案 0 :(得分:4)

使用临时HashMap的基于字符串的Jedis客户端transcodes the strings,因此它会终止您的订单。 BinaryClient iterates over the Map直接保留订单。

lettuce客户端在任何情况下都会保留地图的顺序。

或者,使用HSET hash key value

逐个设置值

HTH,马克

答案 1 :(得分:0)

尝试基于Redis的Java框架 - Redisson。它使用任何编解码器(Jackson JSONAvroSmileCBORMsgPackKryo,{在迭代期间按插入顺序保留地图条目{1}},FSTLZ4Snappy)。