我需要从我的微服务提供到 Redis 的安全连接。
因此,如果我想添加支持身份验证的功能,以便客户端可以发送带有密码的 AUTH 命令。见http://redis.io/topics/security
如何使用 Spring Data Redis 实现来做到这一点?
我试图java.time.LocalDateTime在我的 Cassandra 数据库中保留一个对象并使其与时区无关。我正在使用 Spring Data Cassandra 来做到这一点。
问题是,沿着这条线的某个地方,有些东西将这些LocalDateTime对象视为在我的服务器的时区中,并在将它们存储在数据库中时将它们偏移到 UTC 时间。
这是错误还是功能?我可以以某种方式解决它吗?
配置:
@Configuration
@EnableCassandraRepositories(
basePackages = "my.base.package")
public class CassandraConfig extends AbstractCassandraConfiguration{
@Override
protected String getKeyspaceName() {
return "keyspacename";
}
@Bean
public CassandraClusterFactoryBean cluster() {
CassandraClusterFactoryBean cluster =
new CassandraClusterFactoryBean();
cluster.setContactPoints("127.0.0.1");
cluster.setPort(9142);
return cluster;
}
@Bean
public CassandraMappingContext cassandraMapping()
throws ClassNotFoundException {
return new BasicCassandraMappingContext();
}
}
Run Code Online (Sandbox Code Playgroud)
我希望保留的预订记录:
@Table("booking")
public class BookingRecord {
@PrimaryKeyColumn(
ordinal = 0,
type = PrimaryKeyType.PARTITIONED
)
private UUID bookingId = null; …Run Code Online (Sandbox Code Playgroud) 我想检索仅具有指定字段的多个哈希图值。所以我选择加入 Redis 管道。
在测试以下代码时,我看到redisResponse1始终为空,其中 asredisResponse2具有值。
getRedisTemplate().executePipelined(new RedisCallback<Object>() {
@Override
public Object doInRedis(RedisConnection connection) throws DataAccessException {
List<byte[]> redisResponse1 = connection.hMGet(key.getBytes(), params);
List<byte[]> redisResponse2 = getRedisTemplate().getConnectionFactory().getConnection().hMGet(key.getBytes(), specificParams);
return null;
}
});
Run Code Online (Sandbox Code Playgroud)
当我查看代码并发现下面的代码时,
a)redisResponse2不使用管道选项执行
b)redisResponse1使用管道执行 (isPipelined() == true) 但始终返回 null。
public List<byte[]> hMGet(byte[] key, byte[]... fields) {
try {
if (isPipelined()) {
pipeline(new JedisResult(pipeline.hmget(key, fields)));
return null;
}
if (isQueueing()) {
transaction(new JedisResult(transaction.hmget(key, fields)));
return null;
}
return jedis.hmget(key, fields);
} catch (Exception ex) …Run Code Online (Sandbox Code Playgroud) 我有一个 Elasticache 设置,其中有一个主设备和两个从设备。我仍然不确定如何传入主从 RedisURI 列表来构造StatefulRedisMasterSlaveConnectionfor LettuceConnectionFactory。我只看到对具有单个主机和端口的独立配置的支持。
LettuceClientConfiguration configuration = LettuceTestClientConfiguration.builder().readFrom(ReadFrom.SLAVE).build();
LettuceConnectionFactory factory = new LettuceConnectionFactory(SettingsUtils.standaloneConfiguration(),configuration);
Run Code Online (Sandbox Code Playgroud)
我知道有一个类似的问题Configuring Spring Data Redis with Lettuce for Redis master/slave
但我认为它不适用于 ElastiCache 主/从设置,因为目前上述代码将尝试用于MasterSlaveTopologyProvider发现从属 ip。但是,从属 IP 地址无法访问。那么配置 Spring Data Redis 使其兼容主/从 ElastiCache 的正确方法是什么?在我看来,LettuceConnectionFactory需要获取端点列表并使用StaticMasterSlaveTopologyProvider才能工作。
我们正在利用 Spring Cloud Config 和 Spring Cloud Config Vault。我们想知道是否有一种方法可以“引导引导程序”,即我们希望启动 Spring Cloud 配置服务器,然后从中提取属性以在我们的保管库配置中利用。我们查看了订单,但它似乎不起作用,我认为这是因为后处理订单,但我希望我可能会遗漏一些东西。
spring spring-boot spring-cloud spring-cloud-config spring-cloud-vault-config
目前,我的 spring-boot 应用程序无需凭据即可连接到本地 MongoDB。为了能够在客户处安装它,我需要提供使用用户名和密码进行数据库连接的功能。我正在使用 application.properties 文件,该文件当前仅包含与数据库相关的这 3 行:
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=myApp
Run Code Online (Sandbox Code Playgroud)
还有另外两个:
spring.data.mongodb.username
spring.data.mongodb.password
Run Code Online (Sandbox Code Playgroud)
但当然,我不想在这个文件中使用纯文本形式的密码,或者更糟糕的是在我们的 git 中。一种选择是将它们作为启动脚本的参数提供,但它又可以在流程详细信息中作为纯文本读取。
我已经使用Jasypt在属性文件中看到了一些加密,但我不明白这种方法在我的情况下如何工作。我从未明确使用这些属性,因为它们是由 spring 自动获取来进行连接的。
最安全的方法是什么?
我已经使用 Lettuce(io.lettuce.core.api) 配置初始化了 Spring Boot 应用程序,如下所示
@Configuration
class RedisConfiguration {
@Value("${spring.redis.host}")
private String redisHostname;
@Value("${spring.redis.port}")
private int redisPort;
private StatefulRedisConnection<String, String> redisConnection;
private static RedisClient redisClient;
@Bean
public RedisCommands connectionFactory() {
RedisURI redisURI = RedisURI.create(redisHostname,redisPort);
redisClient = RedisClient.create(redisURI);
redisConnection = redisClient.connect();
RedisCommands<String, String> syncCommands =
redisConnection.sync();
return syncCommands;
}
}
Run Code Online (Sandbox Code Playgroud)
我想redisClient.shutdown();在应用程序关闭或退出时调用。终止redis连接的正确位置是什么?
使用 Lettuce,我们如何配置 Spring Data Redis 运行在主机 x 的 6379 端口和从属运行在相同或不同主机但在端口 6380 上?
我正在尝试使用ReactiveRedisOperationsspring-data-redis 2.1.8 来执行事务,例如:
WATCH mykey
val = GET mykey
val = val + 1
MULTI
SET mykey $val
EXEC
Run Code Online (Sandbox Code Playgroud)
但是在浏览文档或ReactiveRedisOperations. 这在反应式客户端中不可用,或者您如何实现这一点?
java ×7
lettuce ×4
redis ×4
spring ×4
spring-boot ×3
spring-data ×3
cassandra ×1
credentials ×1
lua ×1
pipelining ×1
r2dbc ×1
security ×1
spring-cloud ×1
timezone ×1