如何使用jedis设置地图缓存
How to set map to cache with jedis
我刚开始使用 jedis 而不是 spring-data-redis。
现在我想将 Map 设置为使用 jedis 进行缓存。
我应该怎么办?谁能帮我?谢谢!
让我们在 java 中创建一个复合映射 M(HashMap<String,Map<String ,String>>
的实例),其值为:
A -> (A1 -> A1V; A2 -> A2V)
B -> (B1 -> B1V; B2 -> B2V)
考虑到它只有一个映射,值 A1V 有一个复合键 (A, A1),B2V 有一个复合键 (B, B2) 等等。
考虑到Redis也是一个大映射(键值存储)并且映射M需要存储在键K下(K - > M)值A1V有一个Redis复合键(K,A,A1 ) 和 B2V 有一个 Redis 组合键 (K, B, B2) 等等。
因此您可以将简单的值存储在 Redis 中,只需像这样设计您的键命名空间:
Keys: Values:
K:A:A1 -> A1V
K:A:A2 -> A2V
K:B:B1 -> B1V
K:B:B2 -> B2V
其中键是带分隔符的连接字符串。
如果像 A1V 这样的简单值不是字符串而是像 class 用户实例这样的一种对象,你可以使用 Redis 类型 Hash:http://redis.io/topics/data-types
Redis Hashes are maps between string fields and string values, so they
are the perfect data type to represent objects
我们可以通过序列化将Map转为byte[],然后将map设置到缓存中。或者使用 gson 将 map 更改为 string
试试 enableComplexMapKeySerialization,它在我的情况下效果很好。
GsonBuilder gsonbuilder = new GsonBuilder();
gsonbuilder.enableComplexMapKeySerialization();
gson = gsonbuilder.setPrettyPrinting().create();
我刚开始使用 jedis 而不是 spring-data-redis。 现在我想将 Map 设置为使用 jedis 进行缓存。 我应该怎么办?谁能帮我?谢谢!
让我们在 java 中创建一个复合映射 M(HashMap<String,Map<String ,String>>
的实例),其值为:
A -> (A1 -> A1V; A2 -> A2V)
B -> (B1 -> B1V; B2 -> B2V)
考虑到它只有一个映射,值 A1V 有一个复合键 (A, A1),B2V 有一个复合键 (B, B2) 等等。
考虑到Redis也是一个大映射(键值存储)并且映射M需要存储在键K下(K - > M)值A1V有一个Redis复合键(K,A,A1 ) 和 B2V 有一个 Redis 组合键 (K, B, B2) 等等。
因此您可以将简单的值存储在 Redis 中,只需像这样设计您的键命名空间:
Keys: Values:
K:A:A1 -> A1V
K:A:A2 -> A2V
K:B:B1 -> B1V
K:B:B2 -> B2V
其中键是带分隔符的连接字符串。
如果像 A1V 这样的简单值不是字符串而是像 class 用户实例这样的一种对象,你可以使用 Redis 类型 Hash:http://redis.io/topics/data-types
Redis Hashes are maps between string fields and string values, so they are the perfect data type to represent objects
我们可以通过序列化将Map转为byte[],然后将map设置到缓存中。或者使用 gson 将 map 更改为 string
试试 enableComplexMapKeySerialization,它在我的情况下效果很好。
GsonBuilder gsonbuilder = new GsonBuilder();
gsonbuilder.enableComplexMapKeySerialization();
gson = gsonbuilder.setPrettyPrinting().create();