小编mp9*_*1de的帖子

带有Spring Data Redis的Redis Pub/Sub:消息以错误的顺序到达

我正在尝试使用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)

java spring redis spring-data-redis

5
推荐指数
1
解决办法
4182
查看次数

Redis、SpringBoot 和 HttpSession:我应该加密会话数据吗?

我正在使用Spring Boot 1.3.3来构建 Web 应用程序。我使用Redis来处理会话。

我会将一些“关键”数据设置到 中HttpSession,我想了解这将如何与 Redis 配合使用。是服务器端存储的信息加上浏览器端的密钥还是所有数据都在用户浏览器的cookie中?

我想查看答案的文档参考或获得权威答案(例如 Pivotal dev)。

session session-variables redis spring-boot spring-session

5
推荐指数
2
解决办法
1813
查看次数

我应该从Redis群集奴隶中读取吗?

我们有一个用于Redis的集群配置用作缓存.现在由于写入master和从slave(与其他数据库)读取的正常模式,我们正在尝试使用Redis集群执行相同的操作.
经过一番调查后,我们发现redis,jedis和Spring Data Redis都没有支持Redis客户端(在java中).我们似乎找到了一些解决方法,但它似乎很难看,现在我在想它是否值得?

这是我的用例

  • 最高QPS:1000
  • 有效载荷大小:最大1 MB(压缩后)
  • 群集大小3掌握每个2个从属(相当高规格的机器)
  • Cringe部分:此群集的实际网络带宽为1GB(分别为群集内通话时为1 GB)

考虑到这一点,我有以下问题:

  • 它(从奴隶那里读)会以任何方式帮助我吗?
  • 我应该避免任何坑洞(任何特殊的服务器端配置)?
  • 狭窄的道路会成为一个问题吗?
  • 是否有正确执行此操作的标准方法(库/客户端)

非常感谢任何帮助(博客,案例研究,建议).

java redis jedis redisson redis-cluster

5
推荐指数
2
解决办法
6083
查看次数

如何使用 Spring Data Redis Repositories 构建动态查询?

我正在使用如下存储库使用 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)

java spring redis spring-data spring-data-redis

5
推荐指数
1
解决办法
3264
查看次数

使用 QueryDSL 使用 Spring Data MongoDB 查询 DBRef

我正在使用 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

这是支持的吗?我错过了什么吗?

mongodb querydsl spring-data spring-data-mongodb

5
推荐指数
1
解决办法
1344
查看次数

如何为 R2DBC PostgreSQL 配置架构

我尝试将 Spring Data R2DBC 与 postgres 一起使用。

我知道一些 url、用户名、密码的配置。

spring.r2dbc.url
spring.r2dbc.username
spring.r2dbc.password
Run Code Online (Sandbox Code Playgroud)

模式有什么东西吗?任何可用的设置列表?

java postgresql spring spring-data r2dbc

5
推荐指数
2
解决办法
1818
查看次数

Spring Data Redis:设置密码

我需要从我的微服务提供到 Redis 的安全连接。

因此,如果我想添加支持身份验证的功能,以便客户端可以发送带有密码的 AUTH 命令。见http://redis.io/topics/security

如何使用 Spring Data Redis 实现来做到这一点?

spring-data spring-data-redis

4
推荐指数
1
解决办法
1万
查看次数

Spring WebFlux:在Spring Data MongoDB反应库中发出null值的异常?

我正在尝试学习如何使用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()我阻止这种方法被反应.我是反应式编程的新手,我很难找到好的文档.有人可以指点我正确的方向吗?

java spring reactive-programming spring-data-mongodb

4
推荐指数
1
解决办法
5591
查看次数

如何在Spring Data存储库接口中使用Kotlin默认方法?

请考虑以下存储库接口声明:

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

java spring-data kotlin

4
推荐指数
3
解决办法
1637
查看次数

如何使用 Postgresql 使用 Spring Data R2DBC 保存对象时检索生成的 ID

你能帮我解决下面的问题吗

我有一个实体类:

@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)

我希望获得保存的用户,我该怎么做

spring reactive r2dbc

4
推荐指数
1
解决办法
8123
查看次数