浅谈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 12 Redis
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
May 21 Redis
了解Redis常见应用场景
Jun 23 Redis
Redis Cluster集群动态扩容的实现
Jul 15 Redis
缓存替换策略及应用(以Redis、InnoDB为例)
Jul 25 Redis
CentOS8.4安装Redis6.2.6的详细过程
Nov 20 Redis
Redis 中使用 list,streams,pub/sub 几种方式实现消息队列的问题
Mar 16 Redis
Redis调用Lua脚本及使用场景快速掌握
Mar 16 Redis
redis数据一致性的实现示例
Mar 18 Redis
Redis集群节点通信过程/原理流程分析
Mar 18 Redis
解决 Redis 秒杀超卖场景的高并发
Apr 12 Redis
Redis高并发缓存架构性能优化
May 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分页函数
2006/07/08 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
2016/01/07 PHP
php常用日期时间函数实例小结
2019/07/04 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
2019/11/23 PHP
Mootools 1.2教程 滚动条(Slider)
2009/09/15 Javascript
js post方式传递提交的实现代码
2010/05/31 Javascript
jquery animate实现鼠标放上去显示离开隐藏效果
2013/07/21 Javascript
node.js开机自启动脚本文件
2014/12/24 Javascript
jquery左右全屏大尺寸多图滑动效果代码分享
2015/08/28 Javascript
js中Number数字数值运算后值不对的解决方法
2017/02/28 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
解决VUEX刷新的时候出现数据消失
2017/07/03 Javascript
js弹性势能动画之抛物线运动实例详解
2017/07/27 Javascript
详解BootStrap表单验证中重置BootStrap-select验证提示不清除的坑
2019/09/17 Javascript
[46:16]2018DOTA2亚洲邀请赛3月30日 小组赛B组 iG VS VP
2018/03/31 DOTA
python调用java的Webservice示例
2014/03/10 Python
Python中使用PDB库调试程序
2015/04/05 Python
python编程开发之日期操作实例分析
2015/11/13 Python
python结合API实现即时天气信息
2016/01/19 Python
python实现按任意键继续执行程序
2016/12/30 Python
教你用Python创建微信聊天机器人
2020/03/31 Python
Python+OpenCV实现车牌字符分割和识别
2018/03/31 Python
pandas创建新Dataframe并添加多行的实例
2018/04/08 Python
numpy concatenate数组拼接方法示例介绍
2019/05/27 Python
对pyqt5多线程正确的开启姿势详解
2019/06/14 Python
css3个性化字体_动力节点Java学院整理
2017/07/12 HTML / CSS
俄罗斯韩国化妆品网上商店:Cosmasi.ru
2019/10/31 全球购物
俄罗斯家居用品购物网站:Евродом
2020/11/21 全球购物
中医药大学毕业生自荐信
2013/11/08 职场文书
怎样拟定创业计划书
2014/05/01 职场文书
个人反四风对照检查材料思想汇报
2014/09/23 职场文书
小学思想品德教学反思
2016/02/24 职场文书
自荐信大全
2019/03/21 职场文书
如何才能写好调研报告?
2019/07/03 职场文书
关于感恩的作文
2019/08/26 职场文书
MySQL 字符集 character
2022/05/04 MySQL