作者回复: 比如,你按ID存了一个数据到Redis里,但又希望能按别的维度来查询时,一种方式就是自己维护二级索引,而RedisRepository可以帮你做这个二级索引,让你根据自己需要来查询。
作者回复: 1. 官方文档里也解释了Lettuce使用连接池的场景:使用Redis Transactions的时候。我们自己在产线使用时目前还是以Jedis为主,没有用Lettuce。Lettuce是线程安全的,而Redis又是但线程的,所以一般情况下,只是简单的get/set,多连接并不会有明显的性能提升。
2. 超时是要设置的,不然Redis内存里的数据只多不减,不要指望所有人都会在用完后删除不要的KEY,然后就容易Redis的数据越来越多,而且还不知道去掉哪些。你提到的计数器,如果是我,会考虑设置有效期,然后延期。
作者回复: 设置最大的重定向次数的,RedisCluster里,你把请求发到了某个节点上,它发现这个KEY不在自己这里,就会告诉你重定向到另一个节点上去找。
作者回复: 你想要说的是做分布式Session吧,我们在Web章节里提到了这个话题,可以先跳过去看看。
作者回复: 完全自己用Jedis或者Lettuce客户端什么都做,也就是你说的最灵活的。但如果你就想缓存一些方法的执行结果,Spring的缓存抽象都帮你写好了,直接用就行,这时你就不用自己再操心怎么写了。
作者回复: 由CacheManager决定的,如果你用的是Redis的CacheManager,那就是用Redis。你也可以配置复合的CacheManager。
作者回复: 我们一般的用法是把Redis当缓存来用,既然是缓存就要有个失效时间,不然缓存的内容越来越多,内存相对磁盘而言还是很昂贵的。Redis里的数据一旦没了,我们要求有手段能够补偿回来。其实,显示情况也可能是这样的,Redis扛不住压力挂了,背后的DB更扛不住……
至于你说的一定要在Redis里存个永久的值,没人拦着你,可以不设置有效时间。
全局ID,我们一般用分布式序列号生成器来做,不依赖中心节点。
作者回复: Coffee是用来存RDMBS的,用了@Entity,而CoffeeCache是用来存Redis的,用了@RedisHash。
作者回复: 这个你可以网上查查,我记得Redis的话Value大于1KB性能会下降比较厉害。
作者回复: 我示例里RedisHash里加了timeToLive的
作者回复: 这个是Spring核心提供的功能,很多地方都能用到,具体可以看看Spring文档的3.4. Spring Type Conversion 这一节。
作者回复: 这个在新的课件里都已经标注了
作者回复: Spring的缓存抽象,是不论底层用何种实现方式,上层使用的方法都是基本一致的,可以是单机的缓存,也可以是Redis的,方便了缓存的使用。而Redis除了做缓存,也可以有其他的用途,比如在一些场景中代替RDBMS,这时用Redis的Repository,可以像使用其他Repository一样,保持了类似的使用习惯。
作者回复: 这个看你自己需要吧,如果是我,会把持久化存储和缓存分开在不同的包里。
作者回复: 如果编译和运行都没什么问题,那就不要在意这些IDE上的差异吧,大家的配置可能不太一样。
作者回复: 恩,如果不是默认端口,那你需要自己来指定的
作者回复: actuator的beans里有具体的Bean是哪里定义的信息,你可以看看