浅谈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过期事件实现订单超时取消
May 08 Redis
解析高可用Redis服务架构分析与搭建方案
Jun 20 Redis
k8s部署redis cluster集群的实现
Jun 24 Redis
浅谈Redis中的RDB快照
Jun 29 Redis
Redis集群的关闭与重启操作
Jul 07 Redis
Redis Cluster 集群搭建你会吗
Aug 04 Redis
Jedis操作Redis实现模拟验证码发送功能
Sep 25 Redis
Redis命令处理过程源码解析
Feb 12 Redis
源码分析Redis中 set 和 sorted set 的使用方法
Mar 22 Redis
Redis特殊数据类型bitmap位图
Jun 01 Redis
Redis唯一ID生成器的实现
Jul 07 Redis
redis protocol通信协议及使用详解
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
初学者入门:细述PHP4的核心Zend
2006/09/05 PHP
修改了一个很不错的php验证码(支持中文)
2007/02/14 PHP
PHP数据类型之整数类型、浮点数的介绍
2013/04/28 PHP
php+mysqli实现批量替换数据库表前缀的方法
2014/12/29 PHP
ThinkPHP实现的rsa非对称加密类示例
2018/05/29 PHP
ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
2019/05/06 PHP
Laravel 数据库加密及数据库表前缀配置方法
2019/10/10 PHP
解析jQuery与其它js(Prototype)库兼容共存
2013/07/04 Javascript
jQuery插件 selectToSelect使用方法
2013/10/02 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
2016/05/24 Javascript
JS传值出现中文参数乱码的解决方法
2016/06/30 Javascript
JS 实现可停顿的垂直滚动实例代码
2016/11/23 Javascript
jquery实现图片列表鼠标移入微动
2016/12/01 Javascript
jQuery中DOM节点的删除方法总结(超全面)
2017/01/22 Javascript
Vue2.0使用过程常见的一些问题总结学习
2017/04/10 Javascript
微信小程序实现图片懒加载的示例代码
2017/12/13 Javascript
JS module的导出和导入的实现代码
2019/02/25 Javascript
使用vue-cli3新建一个项目并写好基本配置(推荐)
2019/04/24 Javascript
Vue分页器实现原理详解
2019/06/28 Javascript
[46:23]完美世界DOTA2联赛PWL S2 FTD vs Magma 第一场 11.20
2020/11/23 DOTA
python matplotlib坐标轴设置的方法
2017/12/05 Python
win10下tensorflow和matplotlib安装教程
2018/09/19 Python
python中使用 xlwt 操作excel的常见方法与问题
2019/01/13 Python
Python调用百度根据经纬度查询地址的示例代码
2019/07/07 Python
使用pyecharts1.7进行简单的可视化大全
2020/05/17 Python
python 密码学示例——理解哈希(Hash)算法
2020/09/21 Python
flask项目集成swagger的方法
2020/12/09 Python
如何在Canvas中添加事件的方法示例
2019/05/21 HTML / CSS
东方电视购物:东方CJ
2016/10/12 全球购物
怀俄明州飞钓:Platte River Fly Shop
2017/12/28 全球购物
致垒球运动员加油稿
2014/02/16 职场文书
治理商业贿赂工作总结
2015/08/10 职场文书
小学教师教育随笔
2015/08/14 职场文书
七年级作文之下雨天
2019/12/23 职场文书
使用MybatisPlus打印sql语句
2022/04/22 SQL Server