我正在尝试使用Redis发布/订阅Spring Data Redis来实现聊天.
我使用RedisTemplate发布消息,如下所示:
public class RedisPublisher {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
public void publish(ChannelTopic channelTopic, Object channelMessage) {
redisTemplate.convertAndSend(channelTopic.getTopic(), channelMessage);
}
}
Run Code Online (Sandbox Code Playgroud)
为了接收消息,我有一个MessageListener,如下所示:
public class RedisConsumer implements MessageListener {
MessageSerializer serializer = new MessageSerializer();
AtomicInteger atomicInteger = new AtomicInteger(0);
@Override
public void onMessage(Message message, byte[] pattern) {
Object obj = serializer.deserialize(message.getBody());
if(obj != null && obj instanceof RedisMessage) {
System.err.println("Received message(" + atomicInteger.incrementAndGet() + ") " + obj.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
消息的发布方式如下:
final ChannelTopic channelTopic=connectionManager.subscribe("topic");
new Thread(new Runnable() { …Run Code Online (Sandbox Code Playgroud) 我正在使用Spring Boot 1.3.3来构建 Web 应用程序。我使用Redis来处理会话。
我会将一些“关键”数据设置到 中HttpSession,我想了解这将如何与 Redis 配合使用。是服务器端存储的信息加上浏览器端的密钥还是所有数据都在用户浏览器的cookie中?
我想查看答案的文档参考或获得权威答案(例如 Pivotal dev)。
我们有一个用于Redis的集群配置用作缓存.现在由于写入master和从slave(与其他数据库)读取的正常模式,我们正在尝试使用Redis集群执行相同的操作.
经过一番调查后,我们发现redis,jedis和Spring Data Redis都没有支持Redis客户端(在java中).我们似乎找到了一些解决方法,但它似乎很难看,现在我在想它是否值得?
这是我的用例
考虑到这一点,我有以下问题:
非常感谢任何帮助(博客,案例研究,建议).
我正在使用如下存储库使用 spring-data-redis 测试 Redis:
public interface CreditCardRepository extends CrudRepository<CreditCard, String>{
List<CreditCard> findByIssuer(String issuer);
List<CreditCard> findByCreditNetwork(String creditNetwork);
List<CreditCard> findByCreditNetworkAndIssuer(String creditNetwork, String issuer);
}
Run Code Online (Sandbox Code Playgroud)
上述方法将查询 Redis 结构,例如:
creditcard:creditNetwork:mastercard
creditcard:creditNetwork:visa
creditcard:issuer:company1
creditcard:issuer:company2
Run Code Online (Sandbox Code Playgroud)
现在我的 CreditCard 对象包含两个属性(发行者、网络和 ID),所以很容易搜索这样的对象:
private List<CreditCard> searchCardFromCache(CreditCardGetReq req) {
if (req.getIssuer() != null && req.getNetwork() != null) {
return ccRepository.findByIssuerAndCreditNetwork(req.getIssuer(), req.getNetwork().name());
}
if (req.getIssuer() != null) {
return ccRepository.findByIssuer(req.getIssuer());
}
if (req.getNetwork() != null) {
return ccRepository.findByCreditNetwork(req.getNetwork().name());
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
但是,我不喜欢这段代码,因为我必须创建所有属性的组合并且会非常混乱。将来,我计划拥有 15 个属性,因此“if”链是不可能的。
我想问一下,如何使用spring-data-redis创建动态查询,这样Redis可以比检查每个属性更好地返回基于对象属性的交集?
已尝试通过硬编码(我之前从存储库中删除findByIssuerAndCreditNetwork)使用 MethodHandle一个将动态生成的方法名称,如下所示:
MethodType methodType …Run Code Online (Sandbox Code Playgroud) 我正在使用 Spring Data MongoDB 和 QueryDSL 来执行一些简单的查询,但是我在尝试将谓词与 DBRef 对象的字段一起使用时遇到了问题。
似乎 DBRef 没有解析,所以查询总是返回空结果。从 2014 年开始,这个话题主要有一些问题,虽然似乎在 QueryDSL 和 Spring Data 方面都做了一些工作,但我仍然无法让它工作,也没有找到任何工作示例。
我正在寻找一个简单的解决方案,如以下简化的测试用例:
@Document
class Foo {
@Id Integer id;
@DBref Bar bar;
}
@Document
class Bar {
@Id Integer id;
String name;
}
interface FooRepository extends MongoRepository<Foo, Integer>, QueryDslPredicateExecutor<Foo> { ... }
Run Code Online (Sandbox Code Playgroud)
以及我尝试使用的查询:
fooRepository.findAll(QFoo.foo.bar.name.eq("test"))
Run Code Online (Sandbox Code Playgroud)
我正在使用 QueryDSL 4.1.4、Spring Boot 1.5.3 和 Spring Data MongoDB 1.10.3
这是支持的吗?我错过了什么吗?
我尝试将 Spring Data R2DBC 与 postgres 一起使用。
我知道一些 url、用户名、密码的配置。
spring.r2dbc.url
spring.r2dbc.username
spring.r2dbc.password
Run Code Online (Sandbox Code Playgroud)
模式有什么东西吗?任何可用的设置列表?
我需要从我的微服务提供到 Redis 的安全连接。
因此,如果我想添加支持身份验证的功能,以便客户端可以发送带有密码的 AUTH 命令。见http://redis.io/topics/security
如何使用 Spring Data Redis 实现来做到这一点?
我正在尝试学习如何使用MongoDB反应性存储库spring-boot 2.0.0.M2,但我担心我没有按预期做事.
这是我的方法之一,试图User通过他们的电子邮件找到.但如果没有,该方法应抛出异常.
@Override
public Mono<User> findByEmail(String email) {
User user = repository.findByEmail(email).block();
if(user == null) {
throw new NotFoundException("No user account was found with email: " + email);
}
return Mono.just(user);
}
Run Code Online (Sandbox Code Playgroud)
存储库扩展ReactiveCrudRepository<User, String>,但我担心通过使用.block()我阻止这种方法被反应.我是反应式编程的新手,我很难找到好的文档.有人可以指点我正确的方向吗?
请考虑以下存储库接口声明:
interface KotlinUserRepository : Repository<User, String> {
fun findById(username: String): User
fun search(username: String) = findById(username)
}
Run Code Online (Sandbox Code Playgroud)
我正在声明一个默认search(…)调用的默认接口方法findById(…).
启动我的应用程序失败:
org.springframework.data.mapping.PropertyReferenceException: No property Search found for type User!
如何在Spring Data存储库接口中使用Kotlin默认方法并阻止PropertyReferenceException?
你能帮我解决下面的问题吗
我有一个实体类:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
@Id
private Long id;
private String name;
}
Run Code Online (Sandbox Code Playgroud)
我将其保存在 Postgresql 中,代码如下:
public Mono<User> save(User user){
return databaseClient().inTransaction(db -> {
return db
.insert()
.into(User.class)
.using(user)
//todo: return saved user
});
}
Run Code Online (Sandbox Code Playgroud)
我希望获得保存的用户,我该怎么做
java ×6
spring ×5
spring-data ×5
redis ×4
r2dbc ×2
jedis ×1
kotlin ×1
mongodb ×1
postgresql ×1
querydsl ×1
reactive ×1
redisson ×1
session ×1
spring-boot ×1