资讯专栏INFORMATION COLUMN

关于redis的几件小事(三)redis的数据类型与使用场景

zhaochunqi / 387人阅读

摘要:这个是类似的一种结构,这个一般就是可以将结构化的数据,比如一个对象前提是这个对象没嵌套其他的对象给缓存在里,然后每次读写缓存的时候,可以就操作里的某个字段。

1.string

这是最基本的类型了,就是普通的set和get,做简单的kv缓存。

2.hash

这个是类似map的一种结构,这个一般就是可以将结构化的数据,比如一个对象(前提是这个对象没嵌套其他的对象)给缓存在redis里,然后每次读写缓存的时候,可以就操作hash里的某个字段。

key=150

value={
  “id”: 150,
  “name”: “zhangsan”,
  “age”: 20
}

hash类的数据结构,主要是用来存放一些对象,把一些简单的对象给缓存起来,后续操作的时候,你可以直接仅仅修改这个对象中的某个字段的值

value={
  “id”: 150,
  “name”: “zhangsan”,
  “age”: 21
}
3.list

有序列表,这个是可以做很多不同操作的
比如:微博,某个大v的粉丝,就可以以list的格式放在redis里去缓存

key=某大v

value=[zhangsan, lisi, wangwu]

比如:可以通过list存储一些列表型的数据结构,类似粉丝列表了、文章的评论列表了之类的东西

比如:可以通过lrange命令,就是从某个元素开始读取多少个元素,可以基于list实现分页查询,这个很棒的一个功能,基于redis实现简单的高性能分页,可以做类似微博那种下拉不断分页的东西,性能高,就一页一页走

比如:可以搞个简单的消息队列,从list头怼进去,从list尾巴那里弄出来

4.set

无序集合,自动去重

直接基于set将系统里需要去重的数据扔进去,自动就给去重了,如果你需要对一些数据进行快速的全局去重,你当然也可以基于jvm内存里的HashSet进行去重,但是如果你的某个系统部署在多台机器上呢?

得基于redis进行全局的set去重

可以基于set玩儿交集、并集、差集的操作,比如交集吧,可以把两个人的粉丝列表整一个交集,看看俩人的共同好友是谁?对吧

把两个大v的粉丝都放在两个set中,对两个set做交集

5.sorted set

排序的set,去重但是可以排序,写进去的时候给一个分数,自动根据分数排序,这个可以玩儿很多的花样,最大的特点是有个分数可以自定义排序规则

比如说你要是想根据时间对数据排序,那么可以写入进去的时候用某个时间作为分数,人家自动给你按照时间排序了

排行榜:将每个用户以及其对应的什么分数写入进去,zadd board score username,接着zrevrange board 0 99,就可以获取排名前100的用户;zrank board username,可以看到用户在排行榜里的排名

zadd board 85 zhangsan
zadd board 72 wangwu
zadd board 96 lisi
zadd board 62 zhaoliu

96 lisi
85 zhangsan
72 wangwu
62 zhaoliu

zrevrange board 0 3

获取排名前3的用户

96 lisi
85 zhangsan
72 wangwu

zrank board zhaoliu

4

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/7208.html

相关文章

  • 关于redis几件小事(二)redis线程模型

    摘要:事件分派器会根据每个当前产生的事件,来选择对应的事件处理器来处理。核心是基于非阻塞的多路复用机制单线程避免了多线程上下文切换的开销。 1.memcached和redis有什么区别? (1)Redis支持服务器端的数据操作 redis和memcached相比,redis拥有更多的 数据结构并且支持更丰富的数据操作 ,通常在memcached里面,你需要将数据拿到客户端来进行类型的修改然后在se...

    tuantuan 评论0 收藏0
  • 关于redis几件小事(四)redis过期策略以及内存淘汰机制

    摘要:的过期策略是什么样的采用了定期删除惰性删除的过期策略。定期删除原理定期删除指的是默认每隔就随机抽取一些设置了过期时间的,检测这些是否过期,如果过期了就将其删掉。所有只会抽取一部分而不会全部检查。 1.数据为什么会过期? 首先,要明白redis是用来做数据缓存的,不是用来做数据存储的(当然也可以当数据库用),所以数据时候过期的,过期的数据就不见了,过期主要有两种情况, ①在设置缓存数据时制定了...

    AbnerMing 评论0 收藏0
  • 关于MQ几件小事(五)如何保证消息按顺序执行

    摘要:一个对应一个,但是里面进行了多线程消费,这样也会造成消息消费顺序错误。保证消息的消费顺序拆分多个,每个一个,就是多一些而已,确实是麻烦点这样也会造成吞吐量下降,可以在消费者内部采用多线程的方式取消费。 1.为什么要保证顺序 消息队列中的若干消息如果是对同一个数据进行操作,这些操作具有前后的关系,必须要按前后的顺序执行,否则就会造成数据异常。举例: 比如通过mysql binlog进行两个数据...

    h9911 评论0 收藏0
  • 关于MQ几件小事(四)如何保证消息不丢失

    摘要:消费端弄丢了数据关闭自动提交,在自己处理完毕之后手动提交,这样就不会丢失数据。弄丢了数据一般要求设置个参数来保证消息不丢失给设置参数这个值必须大于,表示要求每个必须至少有个副本。上一篇如何保证消息不重复消费下一篇如何保证消息按顺序执行 1.mq原则 数据不能多,也不能少,不能多是说消息不能重复消费,这个我们上一节已解决;不能少,就是说不能丢失数据。如果mq传递的是非常核心的消息,支撑核心的业...

    stackvoid 评论0 收藏0
  • 关于MQ几件小事(一)消息队列用途、优缺点、技术选型

    摘要:数量对吞吐量的影响可以达到几百几千个的级别,吞吐量会有小幅度的下降。这是的一大优势,可在同等数量机器下支撑大量的从几十个到几百个的时候,吞吐量会大幅下降。下一篇如何保证消息队列的高可用 1.为什么使用消息队列? (1)解耦:可以在多个系统之间进行解耦,将原本通过网络之间的调用的方式改为使用MQ进行消息的异步通讯,只要该操作不是需要同步的,就可以改为使用MQ进行不同系统之间的联系,这样项目之间...

    xialong 评论0 收藏0

发表评论

0条评论

zhaochunqi

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<