浅谈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 相关文章推荐
为Java项目添加Redis缓存的方法
May 18 Redis
redis cluster支持pipeline的实现思路
Jun 23 Redis
聊一聊Redis与MySQL双写一致性如何保证
Jun 26 Redis
缓存替换策略及应用(以Redis、InnoDB为例)
Jul 25 Redis
Redisson实现Redis分布式锁的几种方式
Aug 07 Redis
详解redis在微服务领域的贡献
Oct 16 Redis
Redis中有序集合的内部实现方式的详细介绍
Mar 16 Redis
redis数据一致性的实现示例
Mar 18 Redis
在Centos 8.0中安装Redis服务器的教程详解
Mar 21 Redis
Redis如何实现验证码发送 以及限制每日发送次数
Apr 18 Redis
Redis实现一个账号只能登录一个设备
Apr 19 Redis
详解Redis的三种常用的缓存读写策略步骤
May 06 Redis
解决redis sentinel 频繁主备切换的问题
redis连接被拒绝的解决方案
Redis如何一键部署脚本
Redis遍历所有key的两个命令(KEYS 和 SCAN)
Apr 12 #Redis
redis配置文件中常用配置详解
Apr 14 #Redis
Redis安装启动及常见数据类型
redis限流的实际应用
Apr 24 #Redis
You might like
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
2007/03/29 PHP
php读取mysql中文数据出现乱码的解决方法
2013/08/16 PHP
php使用反射插入对象示例分享
2014/03/11 PHP
php删除数组中重复元素的方法
2015/12/22 PHP
Laravel中的Auth模块详解
2017/08/17 PHP
PHP实现动态添加XML中数据的方法
2018/03/30 PHP
js实现iframe动态调整高度的代码
2008/01/06 Javascript
DHTML Slide Show script图片轮换
2008/03/03 Javascript
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
2013/04/08 Javascript
js二维数组排序的简单示例代码
2014/01/24 Javascript
js中的onchange和onpropertychange (onchange无效的解决方法)
2014/03/08 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
轻松学习Javascript闭包函数
2015/12/15 Javascript
JavaScript计算值然后把值嵌入到html中的实现方法
2016/10/29 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
2016/11/21 Javascript
jquery实现input框获取焦点的方法
2017/02/06 Javascript
微信小程序中form 表单提交和取值实例详解
2017/04/20 Javascript
基于JavaScript实现报警器提示音效果
2017/10/27 Javascript
Node.js JSON模块用法实例分析
2019/01/04 Javascript
jQuery实现评论模块
2020/08/19 jQuery
arcgis.js控制地图地体的显示范围超出区域自动弹回(实现思路)
2021/01/28 Javascript
[45:25]完美世界DOTA2联赛循环赛 PXG vs IO 第一场 11.06
2020/11/09 DOTA
如何优雅地处理Django中的favicon.ico图标详解
2018/07/05 Python
Django分页功能的实现代码详解
2019/07/29 Python
python绘制雷达图实例讲解
2021/01/03 Python
详解Python模块化编程与装饰器
2021/01/16 Python
HTML5实现晶莹剔透的雨滴特效
2014/05/14 HTML / CSS
世嘉游戏英国官方商店:SEGA Shop UK
2019/09/20 全球购物
技校学生个人职业生涯规划范文
2014/03/03 职场文书
人事任命书范文
2014/06/04 职场文书
中学生秋季运动会广播稿
2014/09/21 职场文书
亮剑观后感500字
2015/06/05 职场文书
2016年5月份红领巾广播稿
2015/12/21 职场文书
读《庄子》有感:美而不自知
2019/11/06 职场文书
浅谈MySQL表空间回收的正确姿势
2021/10/05 MySQL
Python实现日志实时监测的示例详解
2022/04/06 Python