前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis的数据类型和适用场景总结

Redis的数据类型和适用场景总结

作者头像
简单的程序员
发布2020-04-18 00:23:24
4670
发布2020-04-18 00:23:24
举报
文章被收录于专栏:奕仁专栏

注:本篇代码部分均以redisTemplate为例,配置这块忽略

Redis数据类型

string(字符串)hash(哈希)list(列表,相当于linkedlist)set(无序集合,相当于Set)sorted set(有序集合)

string(字符串)

字符串类型是 Redis 中最为基础的数据存储类型,它在 Redis 中是二进制安全的,这意味着该类型可以接受任何格式的数据 设置/获取一个key value

代码语言:javascript
复制
 redisRepository.set("validatorCode","验证码是:203456,10秒内有效",10);
 System.out.println(redisRepository.get("validatorCode")); //验证码是: 
 203456,10秒内有效 
 Thread.sleep(10000);
 System.out.println(redisRepository.get("validatorCode")); // null
 long value = redisRepository.incr("atomicInteger",1);
 System.out.println(value); //1
 value = redisRepository.incr("atomicInteger",11);
 System.out.println(value);//12

适用场景:发短信,存一些静态资源(图片),配置信息等等

hash(哈希)

可以理解为首先有一个主key,在这个主key下数据以key-value形式存储,值的类型也可以是String

代码语言:javascript
复制
redisRepository.hset("user","choviwu", new User("choviwu",18));
redisRepository.hset("user","junshang",new User("junshang",20));
System.out.println(redisRepository.hget("user","choviwu")); 
//{userName=choviwu, age=18}
System.out.println(redisRepository.hget("user","junshang"));
//{userName=junshang, age=20}
System.out.println(redisRepository.hentries("user"));
//{choviwu={userName=choviwu, age=18}, junshang={userName=junshang, age=20}}

另外,redisTemplate还提供了hasHash,set多个hash key/value的api

适用场景:可以根据用户/课程进行hash作为key,用户名作为key,用户基本信息作为value

list(列表,相当于linkedlist)

列表的元素类型为string,按照插入顺序排序,元素有索引

代码语言:javascript
复制
redisRepository.lSet("list", "a");
redisRepository.lSet("list", "b");
redisRepository.lSet("list", "c");
redisRepository.lSet("list", "a");
System.out.println(redisRepository.lGetIndex("list",1));  //根据索引获取值 b
System.out.println(redisRepository.lGet("list",1,2));  //获取指定的列表值 [b,c]

适用场景: 存储用户的文章列表

set(无序集合,相当于Set)

元素具有唯一性,不重复,跟java的Set类似

代码语言:javascript
复制
redisRepository.sSet("blackIp","192.168.0.1","192.168.0.2","192.168.0.3","192.168.0.105");
String ip = NetUtil.getLocalhostStr();
Set set = redisRepository.sGet("blackIp");
    set.forEach(c->{
        if(ip.equals(c)){
            throw new RuntimeException("黑名单");
        }
}); 

适用场景: 封禁指定的ip,存储班级的用户id信息,标签等不重复信息

sorted set(有序集合)

有序集合和集合有着必然的联系,他保留了集合不能有重复成员的特性,但不同得是,有序集合中的元素是可以排序的,但是它和列表的使用索引下标作为排序依据不同的是,它给每个元素设置一个分数,作为排序的依据

代码语言:javascript
复制
redisRepository.sortSet("jlcx","junshang",1);
redisRepository.sortSet("jlcx","xiaoqiang",2);
redisRepository.sortSet("jlcx","zhanmeihong",3);
redisRepository.sortSet("jlcx","wuchaowei",4); 
Set set = redisRepository.sortGet("jlcx",1,3);
set.forEach(c->{
        System.out.println(c);
    });
    //junshang xiaoqiang zhanmeihong

适用场景:某些业务上的类比排序

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-07-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Redis数据类型
    • string(字符串)
      • hash(哈希)
        • list(列表,相当于linkedlist)
          • set(无序集合,相当于Set)
            • sorted set(有序集合)
            相关产品与服务
            云数据库 Redis®
            腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档