java中操作redis

对Hashmap的操作

@Autowired
private StringRedisTemplate redisTemplate;
@Test
     public void saveUserRedis(){
         String tokenkey = "login:user:" + 1;
         User user = new User(1, "张三", 20);
         Map<String, Object> map= BeanUtil.beanToMap(user,new HashMap<>(),
                 CopyOptions.create()
                         .setIgnoreNullValue(true)
                         .setFieldValueEditor((fieldName,fieldValue) -> {
               if (fieldValue == null){
                    fieldValue = "0";
                 }else {
                     fieldValue = fieldValue.toString();
                  }
                     return fieldValue;
                }
         ));

获取 map转对象

 @Test
    public void getHash(){
        String tokenkey = "login:user:" + 1;
        Map<Object, Object> userMap = redisTemplate.opsForHash().entries(tokenkey);
        User user = BeanUtil.fillBeanWithMap(userMap, new User(), false);
        System.out.println(user);
    }
// setIgnoreNullValue(true) 我们设置忽略空值了,但是我们的属性为空的还会报空指针异常
原因:

1.setFieldValueEditor优先级要高于ignoreNullValue导致前者首先被触发,因此出现空指针问题。你在setFieldValueEditor中也需要判空。
2.这么设计的原因主要是,如果原值确实是null,但是你想给一个默认值,在此前过滤掉就不合理了,而你的值编辑后转换为null,后置的判断就会过滤掉。

对String的操作

//设值
@Test
public void testString(){
    redisTemplate.opsForValue().set("login:code:"+"15959400832","616999",2, TimeUnit.MINUTES);
}
//取值
@Test
public void getString(){
    String s = redisTemplate.opsForValue().get("login:code:" + "15959400832");
    System.out.println(s);
}

对象

//设置值
@Test
public void testStringUser(){
    User user = new User(1, "zhangsan", 3);
    String jsonUser = JSONUtil.toJsonStr(user);
    redisTemplate.opsForValue().set("login:user:1",jsonUser,2, TimeUnit.MINUTES);
}

//获取值
@Test
public void getStringUser(){
    String json = redisTemplate.opsForValue().get("login:user:1");
    System.out.println(json);
    User user = JSONUtil.toBean(json, User.class);
    System.out.println(user);
}

对set的操作

@Test
public void test() throws InterruptedException {
    String key="blog:dianzan:1";
    redisTemplate.opsForSet().add(key,"用户id1","用户id2");  //添加
    Boolean flag = redisTemplate.opsForSet().isMember(key, "用户id1");//判断是否存在
    System.out.println(flag);
    TimeUnit.SECONDS.sleep(30);
    redisTemplate.opsForSet().remove(key,"用户id1"); //删除
}

//共同关注
@Test
public void testString(){
    String key="guanzhu:user";
    String key1="beiguanzhu:user";
    redisTemplate.opsForSet().add(key,"1","2","3");
    redisTemplate.opsForSet().add(key1,"11","2","31");
    Set<String> intersect = redisTemplate.opsForSet().intersect(key, key1); //取交集
    intersect.stream().forEach(System.out::println);  //2
}

对Zset的操作

@Test
public void test() throws InterruptedException {
    String key = "zset:dianzan:1";
    redisTemplate.opsForZSet().add(key, "用户1", System.currentTimeMillis()); //添加
    redisTemplate.opsForZSet().add(key, "用户2", System.currentTimeMillis() + 1);  //添加
    redisTemplate.opsForZSet().add(key, "用户3", System.currentTimeMillis() + 2);  //添加
    Double user3 = redisTemplate.opsForZSet().score(key, "用户2"); //判断是否存在
    if (user3 == null) {
        System.out.println("不存在");
    }
    System.out.println(user3);  //1.682406322163E12
    //redisTemplate.opsForZSet().remove(key,"用户1"); //移除
    Set<String> range = redisTemplate.opsForZSet().range(key, 1, 2); //从0开始 0 1 2...
    if (range == null || range.isEmpty()){
        System.out.println(Collections.emptyList());
    }
    List<String> collect = range.stream().map(String::valueOf).collect(Collectors.toList());
    System.out.println(collect); //[用户2, 用户3]
}

对bitMap的操作

@Test
public void testString() {
    LocalDateTime now = LocalDateTime.now();
    String format = now.format(DateTimeFormatter.ofPattern(":yyyyMM"));
    String key="user:sign"+format;
    int dayOfMonth=now.getDayOfMonth(); //这个月的第几天
    //写入redis setbit ket offset 1
    redisTemplate.opsForValue().setBit(key,dayOfMonth-1,true);
    Boolean bit = redisTemplate.opsForValue().getBit(key, dayOfMonth - 1);
    System.out.println(bit);//true
    List<Long> longs = redisTemplate.opsForValue().bitField(key, BitFieldSubCommands.create().get(BitFieldSubCommands.BitFieldType.unsigned(dayOfMonth)).valueAt(0));
    System.out.println(longs.get(0)); //返回十进制的数
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值