渐进式哈希和SpringBoot集成redis

发布时间:2024年01月20日

一)渐进式遍历

1)keys可以一次性的把整个redis中的所有的key都获取到,keys *,这个操作比较危险可能会一下子得到过多的key,从而会造成redis阻塞,因为redis是一个单线程的服务器,通过渐进式遍历,可以做到既能够获取到所有的key又可以保证不会卡死服务器,渐进式不是一个命令把所有的key,而是每执行一次命令,只获取到其中的一部分,这样就可以保证当前一次操作不会太卡,要想得到所有的key就需要多次执行渐进式命令,化整为0,光标设置成0了,意味着这一次是从头开始遍历

2)此处涉及到了一个关键概念,也就是光标,就指向了当前遍历的位置,count表示当前从这里遍历,要遍历几个元素,光标不能理解成下标,?次scan从0开始
当scan返回的下次位置为0时遍历结束不是一个连续递增的整数,仅仅就是一个字符串

3)返回值的前半部分表示,下一次继续遍历是光标要从哪里开始,第二部分是表示真正的遍历到key的内容

4)scan命令是有可能返回空的集合的,命令返回的cursor回到0了,才说明遍历结束了,遍历过程中对服务器状态不会造成任何影响

scan cursor [Match pattern] [Count count] [Type type]

1)pattern表示根据什么样子的特征去匹配

2)count表示限制这一次遍历能够获取到多少元素,默认是10

3)type表示redis中的key都是string类型,但是value的类型不一样,5个通用的类型,5个实际使用的类型

渐进式遍历scan虽然解决了阻塞的问题,但是如果在遍历的过程中建有所变化,增加,删除或者是修改,可能导致遍历的过程中出现键的重复遍历或者是遗漏

二)jedis连接

        <!-- 导入jedis的包 -->
         <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.7.0</version>
        </dependency>
      

?

public class UserController {
    @RequestMapping("/Java100")
    @ResponseBody
    public void run(){
        Jedis jedis=new Jedis("203.82.1.11",6379);
        jedis.auth("12503487");
        System.out.println(jedis.ping());
        start(jedis);
    }
    public void start(Jedis jedis){
        jedis.flushAll();
        SetParams params=new SetParams();
        params.ex(10);
        params.xx();//nx是不存在即设置
        jedis.set("key","value",params);
        String value=jedis.get("key");
        System.out.println(value);
    }
}

?

?

?

spring.redis.host=203.82.1.11
spring.redis.port=8888
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

文章来源:https://blog.csdn.net/weixin_61518137/article/details/135713997
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。