十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章主要讲解了“redis的scan语法及作用对象”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“redis的scan语法及作用对象”吧!

创新互联专注于利津网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供利津营销型网站建设,利津网站制作、利津网页设计、利津网站官网定制、小程序制作服务,打造利津网络公司原创品牌,更为您提供利津网站排名全网营销落地服务。
在redis的db存在大量key或者db里头的某个set、zset、hash里头的元素非常多的话,用普通的get all操作很可能导致redis因为这个操作阻塞了,导致不能响应其他操作,特别是在高并发、海量数据的背景下,这个问题显得尤其严重。那么能不能像数据库那样有个分页的功能呢,答案就是scan操作。本文主要展示怎么在redis-cli以及SpringDataRedis中的使用。【推荐:redis视频教程】
scan之后返回两部分,第一部分是下次scan的参数,第二部分就是scan出来的项
db(key)
127.0.0.1:6379> scan 0 1) "120" 2) 1) "articleMap:63" 2) "articleMap:37" 3) "counter:__rand_int__" 4) "articleMap:60" 5) "tagSet:tag5" 6) "articleMap:80" 7) "messageCache~keys" 8) "mymap" 9) "articleMap:46" 10) "articleMap:55" 127.0.0.1:6379> scan 120 1) "28" 2) 1) "articleMap:17" 2) "tagSet:tag1" 3) "articleMap:18" 4) "articleMap:81" 5) "\xac\xed\x00\x05t\x00\btest-cas" 6) "articleMap:51" 7) "articleMap:94" 8) "articleMap:26" 9) "articleMap:71" 10) "user-abcde"
set(value)
127.0.0.1:6379> sscan myset 0 1) "3" 2) 1) "m" 2) "j" 3) "c" 4) "h" 5) "f" 6) "i" 7) "a" 8) "g" 9) "n" 10) "e" 11) "b" 127.0.0.1:6379> sscan myset 3 1) "0" 2) 1) "l" 2) "k" 3) "d"
zset(value & score)
127.0.0.1:6379> zscan sortset 0 1) "0" 2) 1) "tom" 2) "89" 3) "jim" 4) "90" 5) "david" 6) "100"
hash(key & value)
127.0.0.1:6379> hscan mymap 0 1) "0" 2) 1) "name" 2) "codecraft" 3) "email" 4) "pt@g.cn" 5) "age" 6) "20" 7) "desc" 8) "hello" 9) "sex" 10) "male"
count(指定每次取多少条)
127.0.0.1:6379> scan 0 count 5 1) "240" 2) 1) "articleMap:63" 2) "articleMap:37" 3) "counter:__rand_int__" 4) "articleMap:60" 5) "tagSet:tag5"
match(匹配key)
127.0.0.1:6379> scan 0 match article* 1) "120" 2) 1) "articleMap:63" 2) "articleMap:37" 3) "articleMap:60" 4) "articleMap:80" 5) "articleMap:46" 6) "articleMap:55"
@Test
public void scanDbKeys(){
template.execute(new RedisCallback>() {
@Override
public Iterable doInRedis(RedisConnection connection) throws DataAccessException {
List binaryKeys = new ArrayList();
Cursor cursor = connection.scan(ScanOptions.scanOptions().count(5).build());
while (cursor.hasNext()) {
byte[] key = cursor.next();
binaryKeys.add(key);
System.out.println(new String(key, StandardCharsets.UTF_8));
}
try {
cursor.close();
} catch (IOException e) {
// do something meaningful
}
return binaryKeys;
}
});
} /**
* sadd myset a b c d e f g h i j k l m n
*/
@Test
public void scanSet(){
Cursor cursor = template.opsForSet().scan("myset",ScanOptions.NONE);
while (cursor.hasNext()){
System.out.println(cursor.next());
}
} /**
* zadd sortset 89 tom 90 jim 100 david
*/
@Test
public void scanZSet(){
Cursor> cursor = template.opsForZSet().scan("sortset",ScanOptions.NONE);
while (cursor.hasNext()){
ZSetOperations.TypedTuple item = cursor.next();
System.out.println(item.getValue() + ":" + item.getScore());
}
} /**
* hset mymap name "codecraft"
* hset mymap email "pt@g.cn"
* hset mymap age 20
* hset mymap desc "hello"
* hset mymap sex "male"
*/
@Test
public void scanHash(){
Cursor> curosr = template.opsForHash().scan("mymap", ScanOptions.NONE);
while(curosr.hasNext()){
Map.Entry 感谢各位的阅读,以上就是“redis的scan语法及作用对象”的内容了,经过本文的学习后,相信大家对redis的scan语法及作用对象这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!