如何使用Redis在spring boot rest应用程序中从15-25个符号指定“ID”的长度约束?
@RedisHash("Foo")
public class Foo implements Serializable {
@Id
private Long id;
@Indexed
private Status status;
}
使现代化
我尝试将id
类型更改为String
并为符号长度限制设置size
,但它不起作用(似乎size
注释被忽略)在Redis db使用范围内:
@RedisHash("Foo")
public class Foo implements Serializable {
@Id
@Size(min = 15, max = 25)
private String id;
@Indexed
private Status status;
}
我也尝试过使用自定义验证器,同样的行为——在使用Redis db时,它似乎被忽略了:
@Documented
@Constraint(validatedBy = DigitsLimitValidator.class)
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface DigitsLimit {
String message() default "Digits length is too short or long";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
int min() default 5;
int max() default 15;
}
验证器:
public class DigitsLimitValidator implements ConstraintValidator<DigitsLimit, BigInteger> {
private int min;
private int max;
@Override
public void initialize(DigitsLimit value) {
min = value.min();
max = value.max();
}
@Override
public boolean isValid(BigInteger value, ConstraintValidatorContext cxt) {
return value != null && BigIntegerMath.log10(value, RoundingMode.FLOOR) + 1 >= min && BigIntegerMath.log10(value, RoundingMode.FLOOR) + 1 <= max;
}
}
型号:
@RedisHash("Foo")
public class Foo implements Serializable {
@Id
@DigitsLimit(min = 15, max = 25)
private BigInteger id;
@Indexed
private Status status;
}
在调试模式下,我无法捕获验证程序中的任何断点。
在两次尝试中,我都可以保存任意长度的数字。限制被忽略了。为什么它被忽视了?
如何从15-25个符号中指定“ID”的长度约束
将Long
类型用作Long是没有意义的。MAX_VALUE
“只有”19位数字。
9223372036854775807
要包含这样的值,BigIntger
可能是更好的选择。
无法将@Min
和@Max
注释添加到biginger
字段中,因为这些值被限制在长
范围内。所以你不能代表25位数字。
所以你有两种方法:
>
创建一个自定义验证器,以确保您的约束得到尊重。
将数值替换为字符串
。您可以使用javax。验证。限制。大小
注释,不适用于数字字段,但适用于CharSequence
字段,如String
。
例如:
@Id
@Size(min=15, max=25)
private String id;
我在redis stream文档中看到了这一点,它说: 是时候试着用消费者群体来阅读一些东西了: XREADGROUP回复与XREAD回复一样。请注意,尽管上面提供了一个组,但它声明我希望使用消费者组mygroup从流中读取数据,我是消费者Alice。每次使用者对使用者组执行操作时,都必须指定其名称,以便在组内唯一标识此使用者。 在上面的命令行中还有另一个非常重要的细节,在强制流选项之后,为密钥m
我在 Ecrion 和 Apache FOP 的试用版中渲染了相同的 XSL-FO,您会注意到这两个渲染器在第 2 行和第 3 行上产生了不同的行长。Ecrion 渲染文本的方式就是我希望 Apache FOP 这样做的方式。 我是否可以将属性添加到
在Google的createEventSeries示例(如下所示)中,日期值在末尾用“est”指定。但是,我希望为重复发生的事件指定日期(请参见本答案中的时间类型#4),例如,“每周一晚上9点,即使DST发生变化。”假设我能算出哪天是我重复发生的事件的第一个星期一。问题是我如何指定当天晚上9点应该考虑到夏令时是否生效? 使用时区名称(Olson ID)指定日期是很直观的,例如,使用示例中的日期“7
问题内容: 我是使用Redis的新手,最近在考虑解决出站系统高并发情况的解决方案时遇到了一个问题,我想使用Redis,每个人都知道从In- Memory访问比IO更快。Redis排序集是可以使用的工具,我们想要一个固定大小的排序集来包含用户的手机号码,我用Google搜索/百度搜索了很多,没有找到任何有意义的消息,所以有人可以告诉我如何指定Redis Sorted设置固定大小?而set应该告诉我对
问题内容: 我看到有人没有在教程中设置长度,而是专门用于计算用户总数,并设置为自动递增。我习惯总是指定长度,因为我认为这是强制性的,但是我想问一下是否可以将其保留为空白,除非明确指定了始终设置长度的日期或密码。(如果不确定,我曾经将其设置为11位或更多) 问题答案: 保留为空时,每个整数字段默认为11,因此您可以将其保留。