浅谈redis五大数据结构和使用场景


Posted in Redis onApril 12, 2021

老规矩,先抛结论后验证

浅谈redis五大数据结构和使用场景

string:有点像java的hashMap,存的时候什么key,取的时候也什么key,常用于做缓存,保存用户信息、查询列表等;
hash:这个有点像hashMap的value又套了个hashMap,下文有举例,一看就明白了;
list:有序列表,类似Java的linkedList,可以在左边右边插入数据;
set:去重集合,类似Java的hashset,可用于求交集,比如共同好友;
zset:带权重的set集合,可用于做排行榜;

为了方便理解,我们基于这个dog类来做测试,有手就能学会的那种

//Dog类,属性不重要,随便写的
public class Dog {
    private String name;
    private String like;
}
================分割线================
//new三只小狗
Dog dog1 = new Dog("蔡徐鸡", "唱跳");
Dog dog2 = new Dog("蔡徐公鸡", "rap");
Dog dog3 = new Dog("蔡徐老母鸡", "篮球");

================分割线================
//我们用jedis来操作redis
Jedis jedis = new Jedis();

1、String:

说明:有点像java的hashMap,存的时候什么key,取的时候也什么key,常用于做缓存,保存用户信息、查询列表等;
操作:set方法,第一个参数是key,第二个参数是value;

浅谈redis五大数据结构和使用场景

key可以随便设置,方便后面对比,我们这里设置key为“string”,value就是dog

//set
jedis.set("string",dog1.toString());
//get
jedis.get("string");

看下它在redis中长什么样 (左边很多db,这个不用管,看db0就行)

浅谈redis五大数据结构和使用场景

如果有多个相同的key,前面的会被覆盖掉

jedis.set("string",dog1.toString());
jedis.set("string",dog2.toString());
jedis.set("string",dog3.toString());

浅谈redis五大数据结构和使用场景

2、hash

说明:hashMap的value又套了个hashMap;
操作:hset方法,第一个参数是key,第二个参数是field,第三个参数是value

浅谈redis五大数据结构和使用场景
我还没想到怎么比较好的解释这个field,说多了怕误导你们,反正这个就像你new了个hashMap,然后这个hashMap的value又是个hashMap,然后你真正的数据是存在第二个hashMap里面的

//类似redis的key
HashMap<Object, Object> key = new HashMap<>();
key.put("key",dog1);
//类似redis的field,这才是redis的hash类型真正存放数据的
HashMap<Object, Object> field = new HashMap<>();
key.put("field",field);

还没懂的话就往下面看,别纠结上面那个举例,我也不知道那样说合理不合理

jedis.hset("hash", "field1", dog1.toString());
jedis.hset("hash", "field2", dog2.toString());
jedis.hset("hash", "field3", dog3.toString());

看下在redis中长什么样

浅谈redis五大数据结构和使用场景

再看下hash类型在jedis中的方法应该就懂了

浅谈redis五大数据结构和使用场景

hget会让你输入两个参数,第一个是key,第二个是field,这个方法直接返回的是dog对象;
而hgetAll只需要输入一个参数,然后返回一个map给你,这个map里面装的全是狗,懂了吧,如果你要获取具体的dog对象,你还的输入一个key,这个key就是那个field;

Map<String, String> dogMap= jedis.hgetAll("hash");
System.out.println(dogMap);
//下面是打印出来的map
{field1=Dog(name=蔡徐鸡, like=唱跳), 
 field3=Dog(name=蔡徐老母鸡, like=篮球),
 field2=Dog(name=蔡徐公鸡, like=rap)}
-----------------------------分割线-------------------------------------
String dog= jedis.hget("hash", "field1");
System.out.println(dog);
//下面是打印出来的dog
Dog(name=蔡徐鸡, like=唱跳)

list

说明:有序列表,类似Java的linkedList,可以在左边右边插入数据;
操作:左插入lpush、右插入rpush

我们先插入一条蔡徐鸡

jedis.lpush("list",dog1.toString());

浅谈redis五大数据结构和使用场景

然后在蔡徐鸡的左右两边各插一条数据,

jedis.rpush("list",dog2.toString());//蔡徐公鸡
jedis.lpush("list",dog3.toString());//蔡徐老母鸡

仔细看下面的顺序

浅谈redis五大数据结构和使用场景

set

说明:去重集合,类似Java的set,可用于求交集,比如共同好友;
操作:放入元素sadd,求set的交集sinterstore,sinterstore方法可以有多个参数,因为这个方法会在redis生成一个set,用来存放交集,所以第一个参数是新生成set的名字,后面的参数全都是指定哪些set加入求交集方法

我们先设置两个set,第一个set存放dog1和dog2,第二个set存放dog2和dog3

jedis.sadd("set1",dog1.toString(),dog2.toString());
jedis.sadd("set2",dog2.toString(),dog3.toString());

浅谈redis五大数据结构和使用场景
浅谈redis五大数据结构和使用场景

我们再往set1里面放个dog1试试

jedis.sadd("set1",dog1.toString());

再看看redis的set1里面有几个dog1,既然是set,肯定不允许放入重复数据,所以应该跟上面一样

浅谈redis五大数据结构和使用场景

我们再来看看如何获取set的交集

目前set1里面有蔡徐鸡和蔡徐公鸡,set2里面有蔡徐公鸡和蔡徐老母鸡,那交集就是蔡徐公鸡,来看看是不是

//这个方法会在redis生成一个set,用来存放交集
//第一个参数是指定新生成set的名字,后面的参数全都是指定哪些set加入求交集方法
jedis.sinterstore("set","set1","set2");

来看下reids中有没有生成一个叫set的key
浅谈redis五大数据结构和使用场景

可以看到redis生成了一个名叫set的key,并且它的值是set1和set2的交集,大名鼎鼎的蔡徐公鸡~~

zset

说明:带权重的set集合,可用于做排行榜;
操作:添加元素zadd,需要指定元素的权重

jedis.zadd("zset", 100, dog1.toString());//权重为100的dog1
jedis.zadd("zset", 200, dog2.toString());//权重为200的dog2
jedis.zadd("zset", 300, dog3.toString());//权重为300的dog3

看看redis中的zset是否按照权重排列

浅谈redis五大数据结构和使用场景

of course!!

说明:以上操作redis的方法仅作为理解redis数据类型举例,实际上每个数据类型都还有很多很多其它方法,具体的本文不展开叙述,其次,我们生产中使用redis时,一定要记得给key设置过期时间,除开一些需要对key做持久化的场景,因为redis是运行在内存中的,如果所有key都持久存在于内存,你服务器顶不住的鸭!!!

到此这篇关于浅谈redis五大数据结构和使用场景的文章就介绍到这了,更多相关redis 数据结构和使用场景内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Redis 相关文章推荐
详解Redis实现限流的三种方式
Apr 27 Redis
Redis6.0搭建集群Redis-cluster的方法
May 08 Redis
基于Redis实现分布式锁的方法(lua脚本版)
May 12 Redis
深入浅析Redis 集群伸缩原理
May 15 Redis
5分钟教你docker安装启动redis全教程(全新方式)
May 29 Redis
redis实现的四种常见限流策略
Jun 18 Redis
redis requires ruby version2.2.2的解决方案
Jul 15 Redis
解决Redis启动警告问题
Feb 24 Redis
redis sentinel监控高可用集群实现的配置步骤
Apr 01 Redis
Redis基本数据类型String常用操作命令
Jun 01 Redis
利用Redis实现点赞功能的示例代码
Jun 28 Redis
Redis sentinel哨兵集群的实现步骤
Jul 15 Redis
解决redis sentinel 频繁主备切换的问题
redis连接被拒绝的解决方案
Redis如何一键部署脚本
Redis遍历所有key的两个命令(KEYS 和 SCAN)
Apr 12 #Redis
redis配置文件中常用配置详解
Apr 14 #Redis
Redis安装启动及常见数据类型
redis限流的实际应用
Apr 24 #Redis
You might like
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
2014/06/12 PHP
PHP使用Alexa API获取网站的Alexa排名例子
2014/06/12 PHP
PHP异常处理Exception类
2015/12/11 PHP
PHP赋值的内部是如何跑的详解
2019/01/13 PHP
PHP getNamespaces()函数讲解
2019/02/03 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
js将long日期格式转换为标准日期格式实现思路
2013/04/07 Javascript
JavaScript实现找出字符串中第一个不重复的字符
2014/09/03 Javascript
基于jQuery和CSS3实现APPLE TV海报视差效果
2017/06/16 jQuery
基于vue实现可搜索下拉框定制组件
2020/03/26 Javascript
jQuery超简单遮罩层实现方法示例
2018/09/06 jQuery
微信小程序自定义组件的实现方法及自定义组件与页面间的数据传递问题
2018/10/09 Javascript
详解如何在vue项目中使用layui框架及采坑
2019/05/05 Javascript
JS实现纸牌发牌动画
2021/01/19 Javascript
[03:38]2014DOTA2西雅图国际邀请赛 VG战队巡礼
2014/07/07 DOTA
pycharm 使用心得(一)安装和首次使用
2014/06/05 Python
python通过正则查找微博@(at)用户的方法
2015/03/13 Python
CentOS下Python3的安装及创建虚拟环境的方法
2018/11/28 Python
对json字符串与python字符串的不同之处详解
2018/12/19 Python
Python设计模式之装饰模式实例详解
2019/01/21 Python
使用Python批量修改文件名的代码实例
2019/01/24 Python
在Django model中设置多个字段联合唯一约束的实例
2019/07/17 Python
pytorch 在sequential中使用view来reshape的例子
2019/08/20 Python
Python collections中的双向队列deque简单介绍详解
2019/11/04 Python
pd.DataFrame统计各列数值多少的实例
2019/12/05 Python
澳大利亚礼品篮网站:Macarthur Baskets
2019/10/14 全球购物
类和结构的区别
2012/08/15 面试题
客服部工作职责范本
2014/02/14 职场文书
服装设计师职业生涯规划范文
2014/02/28 职场文书
致共产党员倡议书
2014/04/16 职场文书
彩妆大赛策划方案
2014/05/13 职场文书
歌剧魅影观后感
2015/06/05 职场文书
导游词之珠海轮廓
2019/10/25 职场文书
php微信小程序解包过程实例详解
2021/03/31 PHP
MySQL中varchar和char类型的区别
2021/11/17 MySQL
Springboot/Springcloud项目集成redis进行存取的过程解析
2021/12/04 Redis