一)渐进式遍历
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>