[ https://issues.apache.org/jira/browse/GEODE-2469?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15863976#comment-15863976 ]
Gregory Green commented on GEODE-2469: -------------------------------------- Please see https://redis.io/topics/data-types Hashes Redis Hashes are maps between string fields and string values, so they are the perfect data type to represent objects (e.g. A User with a number of fields like name, surname, age, and so forth): @cli HMSET user:1000 username antirez password P1pp0 age 34 HGETALL user:1000 HSET user:1000 password 12345 HGETALL user:1000 A hash with a few fields (where few means up to one hundred or so) is stored in a way that takes very little space, so you can store millions of objects in a small Redis instance. While Hashes are used mainly to represent objects, they are capable of storing many elements, so you can use Hashes for many other tasks as well. Every hash can store up to 232 - 1 field-value pairs (more than 4 billion). Check the full list of Hash commands for more information, or read the introduction to Redis data types. > Redis adapter Hash key support > ------------------------------ > > Key: GEODE-2469 > URL: https://issues.apache.org/jira/browse/GEODE-2469 > Project: Geode > Issue Type: Bug > Components: redis > Reporter: Gregory Green > > The Redis adapter does not appear to handle hash keys correctly. > The following Example: Redis CLI works. > localhost:11211> HSET companies name "John Smith" > Using a HSET <region>:id .. produces an error > Example: > localhost:11211> HSET companies:1000 name "John Smith" > [Server error] > [fine 2017/02/10 16:04:33.289 EST server1 <Function Execution Processor2> > tid=0x6a] Region names may only be alphanumeric and may contain hyphens or > underscores: companies: 1000 > java.lang.IllegalArgumentException: Region names may only be alphanumeric and > may contain hyphens or underscores: companies: 1000 > at > org.apache.geode.internal.cache.LocalRegion.validateRegionName(LocalRegion.java:7618) > at > org.apache.geode.internal.cache.GemFireCacheImpl.createVMRegion(GemFireCacheImpl.java:3201) > at > org.apache.geode.internal.cache.GemFireCacheImpl.basicCreateRegion(GemFireCacheImpl.java:3181) > at > org.apache.geode.internal.cache.GemFireCacheImpl.createRegion(GemFireCacheImpl.java:3169) > at org.apache.geode.cache.RegionFactory.create(RegionFactory.java:762) > at > org.apache.geode.management.internal.cli.functions.RegionCreateFunction.createRegion(RegionCreateFunction.java:355) > at > org.apache.geode.management.internal.cli.functions.RegionCreateFunction.execute(RegionCreateFunction.java:90) > at > org.apache.geode.internal.cache.execute.AbstractExecution.executeFunctionLocally(AbstractExecution.java:333) > at > org.apache.geode.internal.cache.execute.AbstractExecution$2.run(AbstractExecution.java:303) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) > at > org.apache.geode.distributed.internal.DistributionManager.runUntilShutdown(DistributionManager.java:621) > at > org.apache.geode.distributed.internal.DistributionManager$9$1.run(DistributionManager.java:1067) > at java.lang.Thread.run(Thread.java:745) > //Example Spring Data Redis Object sample > @Data > @EqualsAndHashCode() > @RedisHash(value="companies") > @NoArgsConstructor > public class Company > { > private @Id String id; > .... > //Repository > public interface CompanyRepository extends CrudRepository<Company, String> > { > .... > } > //When saving using a repository > repository.save(this.myCompany); > [Same Server error] > java.lang.IllegalArgumentException: Region names may only be alphanumeric and > may contain hyphens or underscores: > companies:f05405c2-86f2-4aaf-bd0c-6fecd483bf28 > at > org.apache.geode.internal.cache.LocalRegion.validateRegionName(LocalRegion.java:7618) > at > org.apache.geode.internal.cache.GemFireCacheImpl.createVMRegion(GemFireCacheImpl.java:3201) > at > org.apache.geode.internal.cache.GemFireCacheImpl.basicCreateRegion(GemFireCacheImpl.java:3181) > at > org.apache.geode.internal.cache.GemFireCacheImpl.createRegion(GemFireCacheImpl.java:3169) > at org.apache.geode.cache.RegionFactory.create(RegionFactory.java:762) > at > org.apache.geode.management.internal.cli.functions.RegionCreateFunction.createRegion(RegionCreateFunction.java:355) > at > org.apache.geode.management.internal.cli.functions.RegionCreateFunction.execute(RegionCreateFunction.java:90) > at > org.apache.geode.internal.cache.execute.AbstractExecution.executeFunctionLocally(AbstractExecution.java:333) > at > org.apache.geode.internal.cache.execute.AbstractExecution$2.run(AbstractExecution.java:303) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) > at > org.apache.geode.distributed.internal.DistributionManager.runUntilShutdown(DistributionManager.java:621) > at > org.apache.geode.distributed.internal.DistributionManager$9$1.run(DistributionManager.java:1067) > at java.lang.Thread.run(Thread.java:745) -- This message was sent by Atlassian JIRA (v6.3.15#6346)