zset中的score_Redis 在项目中合理使用经验总结

背景

  • Redis 是一个开源的内存数据结构存储系统。
  • 可以作为数据库、缓存和消息中间件使用。
  • 支持多种类型的数据结构。
  • Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence)。
  • 通过 Redis 哨兵(Sentinel)和 Redis 集群(Cluster)的自动分区,提供高可用性(high availability)。

基本数据类型

  • 字符串(strings)
1、string 的过期时间在重新设置值之后会被清除
127.0.0.1:6379> set hello 3
OK
127.0.0.1:6379> get hello
"3"
127.0.0.1:6379> ttl hello
(integer) -1
127.0.0.1:6379> expire hello 3000
(integer) 1
127.0.0.1:6379> set hello 4
OK
127.0.0.1:6379> ttl hello
(integer) -1
2、设置 string 类型的值可以覆盖任何其他类型
127.0.0.1:6379> sadd settest 1,2
(integer) 1
127.0.0.1:6379> type settest
set
127.0.0.1:6379> set settest hello
OK
127.0.0.1:6379> type settest
string
127.0.0.1:6379> sadd settest a,b
(error) WRONGTYPE Operation against a key holding the wrong kind of value
  • 散列(hashes)
  • 列表(lists)
Redis lists 基于 Linked Lists 实现。头尾操作极速,检索较慢
  • 集合(sets)
  • 支持范围查找的有序集合(sorted sets)
有序集合的排序默认按照字典序排列
  • bitmaps
  • hyperloglogs
  • 支持按半径索引查询的地理空间(geospatial)

应用场景

string

  • 缓存数据

不管是简单和复杂的数据都可以直接转为string存储。

key: active:spring2019:title value:"2019春节活动" 操作:set

商品信息,省市区信息,活动配置等一系列不常变化的冷数据缓存

非常热门数据的缓存,游戏排行,后台每秒更新一次数据

  • 简单计数

2019春节活动参加人数

key: active:spring2019:total value:3045 操作:incr

  • 定时过期

一个人一天只能进行一次签到

key:active:checkin:userId:10000:day:20190101 value:签到时间戳 操作:expire

  • 分布式锁

下面的代码不严谨,nx 可以放并发

127.0.0.1:6379> set lockkey 1  nx
OK
127.0.0.1:6379> set lockkey 1  nx
(nil)

list

  • 用户排队

push,pop

  • 有序消息

push,pop

  • 实现生产者和消费者模型

阻塞式访问 BRPOP 和 BLPOP 命令

set

  • 去重列表

2019春节活动参加人数

key: active:spring2019:users value:100010,10020 操作:很多

  • 标签

用户标签

商家标签

春节活动一共有 abcde 5个任务,用户A已经完成a,b,用户B已经完成 c,d

  • 交集

用户A,用户B 都完成的任务

  • 并集

用户A,用户B 任一完成的任务

  • 差集

用户A还没有完成的任务

  • 获取随机元素

从礼品库 set 中随机获得一个礼品

hash

  • 同一资源的不同属性

用户在活动期间一共获得了不同种类奖品数量

key:active:spring:g'ifts:user:10010 value:{"giftA":2,"giftB":5} 操作:很多

可以直接对 giftA 执行 incr 操作

zset

  • 排行榜

用户消费排行,点赞排行等

key:active:spring:star:rank value:用户ID,score:点赞数量 操作:很多

根据分数获取 top 10

查询某个用户的分数

查询 得分在90-100 之间的用户

有时候我们的得分并不是由某一项业务值决定的,可能是由两项业务值来排序的,比如先看用户的实际得分,在看用户等级,那么我们在设计score的时候可以用小数点之前的值表示得分,小数点之后的值表示等级,如果有其他特殊要求,还可以考虑得分加上某个极大值来处理。

注意事项

  • 每个 key 都应该有合理的失效时间
  • string的过期时间在重新设值后会被覆盖
  • string类型的 set 操作可以覆盖类型
  • 合理使用相应的数据结构
不要用list存大量数据并检索
  • 合理规划 key 的数量
判断用户有没有参加应该用set,不应该每个用户一个key
  • 环境数据隔离
  • 业务数据隔离 用户 redis 业务 redis 活动 redis 应该做区分,活动的 redis 在活动结束后可以自由清理
  • 合理使用管道,lua 脚本和 redis 事务,提高性能,尤其是在脚本中使用 redis 的时候
  • 在有大量 key 的 Reids 线上系统,要在主库禁用 keys * 操作,防止卡死。

作者:Lucifer_Yu

来源:开源中国

原文:https://my.oschina.net/u/920698/blog/3031587

福利专区:

不得不精Redis|Redis视频课程 - 蛙课视频​www.wkcto.com
f92d4b79506d95b4026ac9b32cf48179.png

6b732fbb63bc3960ca2c2d76736c852a.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489609.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

八种颠覆未来作战的前沿技术

来源:军事高科技在线目录一、颠覆未来作战的前沿技术系列——脑科学二、颠覆未来作战的前沿技术系列——人体增强三、颠覆未来作战的前沿技术系列——石墨烯四、颠覆未来作战的前沿技术系列——超材料五、颠覆未来作战的前沿技术系列——太赫兹技术六、颠覆未来作战…

Java对象垃圾回收调用,JVM垃圾回收之哪些对象可以被回收

1.背景Java语言相比于C和C,一个最大的特点就是不需要程序员自己手动去申请和释放内存,这一切交由JVM来完成。在Java中,运行时的数据区域分为程序计数器、Java虚拟机栈、本地方法栈、方法区和堆。其中,程序计数器、虚拟机栈和本地方…

hp

命令组成hpacucli [parametervalue] 查看: 查看所有控制器状态 hpacucli ctrl all show 查看slot 0阵列信息详细状态 (可以查看物理磁盘和逻辑磁盘的对应关系)1)hpacucli ctrl slot0 show config detail2)hpacucli ct…

报告|机器人行业深度报告:机器人产业价值与回报相关度分析

来源:机器人大讲堂2009~2018年中国工业机器人保有量在全球保有量的占比稳步提升。据IFR数据,截止2018年底,中国工业机器人保有量达到64.94万台,全球占比为26.97%。2013~2018年间中国新增工业机器人中国产品…

汉字的ascii码值范围_ASCII代码

同学们,我们都知道计算机只能接受二进制信息,很显然直接给出英文的ABCD计算机并不认识,那为何敲击键盘屏幕就可以显示出对应的字符呢?为了解决这个问题,计算机采用一套编码,每个编码都是唯一的,…

从ICLR提交论文看机器学习的趋势和风口

大数据文摘出品来源:deepsense2013年才举办第一届的ICLR(The International Conference on Learning Representations)发展迅猛,如今已成为是最重要的国际机器学习会议之一,甚至可以和ICML,NeurIPS和CVPR这…

php 登录安全认证,介绍几种常用的web安全认证方式

本文为大家介绍了五种常用的web安全认证方式,具有一定的参考价值,希望能对大家有所帮助。1、Http Basic Auth这是一种最古老的安全认证方式,这种方式就是简单的访问API的时候,带上访问的username和password,由于信息会…

日期选择控件-laydate

laydate控件非常简单易用&#xff0c;只需要调用一个个函数就可以轻松实现日期时间选择。 <% page language"java" import"java.util.*" pageEncoding"UTF-8"%><%String path request.getContextPath();String basePath request.getS…

这个“大脑”收获一份大奖!

来源&#xff1a;新华社第17届亚洲-太平洋通讯社组织&#xff08;亚通组织&#xff09;全体大会8日在韩国首尔闭幕。大会颁发了亚通组织卓越通讯社品质奖&#xff0c;中国新华通讯社与越南通讯社分别获奖。这是亚通组织主席、阿塞拜疆国家新闻社社长阿斯兰阿斯兰诺夫&#xff0…

检查用户名是否存在的servlet代码怎么写_Servlet详解!!!

1 掌握 请求转发2 掌握 请求重定向3 掌握cookie1. 请求转发介绍(1) 为什么需要请求转发?以此请求的处理需要多个Servlet的联动操作,第一个Servlet需要用到其他Servlet已经声明的逻辑处理代码(2) 请求转发的本质是什么&#xff1f;其实就是在一个Servlet中调用其他的Servlet2. …

学习人工智能必须攻克三道门槛:数学基础、英语水平与编程技术

来源&#xff1a;搜狐广义的说&#xff0c;人工智能包含诸多不同方法&#xff0c;其主旨是让程序像一个智能体一样解决问题。机器学习是实现人工智能的一种方法&#xff0c;它不完全依靠预先设计&#xff0c;而是从数据中进行总结&#xff0c;达到模拟记忆、推理的作用。包括诸…

【智能驾驶】自动驾驶深度感知技术对车和行人的检测

来源&#xff1a;小马智行第二场技术沙龙今天我主要想分享自动驾驶感知技术在探索的过程中&#xff0c;采用的传统方法和深度学习方法。传统方法不代表多传统&#xff0c;深度学习也不代表多深度。它们有各自的优点&#xff0c;也都能解决各自的问题&#xff0c;最终希望将其结…

matlab读取其他位置,将文件的数据读取到matlab中,进行编辑,然后将其保存到其他位置...

将文件的数据读取到matlab中&#xff0c;进行编辑&#xff0c;然后将其保存到其他位置 我有一个名为EXP1_SQ1_Template.txt的文件。这是一个简单的文本文件&#xff0c;包含以下8行&#xff1a;LOAD BOX 1 SUBJ M1_299633_D295158_JUN191910_Aut_ERROR2 EXPT St(m)_Se(n)_Rat1 …

中国信通院《新型智慧城市发展研究报告》

来源&#xff1a;云头条本报告结合新时期我国新型智慧城市的建设重点&#xff0c;围绕顶层设计、体制机制、智能基础设施、智能运行中枢、智慧生活、智慧生产、智慧治理、智慧生态、技术创新与标准体系和安全保障体系等十大核心要素&#xff0c;深入分析研究了我国新型智慧城市…

oracle 内存分析工具,IDE 中的分析工具

IDE 中的分析工具Oracle Solaris Studio IDE 提供的交互式图形分析工具可用于检查在 IDE 内部运行的项目的性能。分析工具使用 Oracle Solaris Studio 实用程序和操作系统实用程序来收集数据。可通过 "Profile Project"(分析项目)按钮使用分析工具。Monitor Project(…

关于直播,所有的技术细节都在这里了(2)《转载》

本文转载置顶&#xff1a;http://blog.ucloud.cn/archives/694 感谢作者无私的奉献精神&#xff01; 上篇《 关于直播&#xff0c;所有的技术细节都在这里了(1)《转载》 》我们讲述了如何让直播内容以“最短”路径从主播到观众上&#xff0c;传输层面获得最低延迟&#xff0c;在…

光刻机的工作原理及关键技术

来源&#xff1a;传感器技术光刻机的工作原理&#xff1a;利用光刻机发出的光通过具有图形的光罩对涂有光刻胶的薄片曝光&#xff0c;光刻胶见光后会发生性质变化&#xff0c;从而使光罩上得图形复印到薄片上&#xff0c;从而使薄片具有电子线路图的作用。这就是光刻的作用&…

sarscape 将dem文件转化成stl_SARscape与SARProz软件中的重要缩写

1.SARscapeSARscape 由 sarmap 公司研发&#xff0c;是国际知名的雷达图像处理软件。 该软件架构于专业的ENVI 遥感图像处理软件之上&#xff0c;提供完整的 SAR 数据处理功能&#xff0c;全面支持四种模式的数据&#xff1a;雷达强度图像处理、雷达干涉测量(InSAR/DInSAR)、极…

很全的路由器默认初始密码集合.txt_UpSet——集合关系可视化神器

学习更多生信小技巧&#xff0c;点上方蓝字关注我们分析背景01提到集合的可视化&#xff0c;大家第一时间想到的是用Venn图来展示&#xff0c;在前期的推文中&#xff0c;小编也给大家分享了venn图的绘制方法。然而&#xff0c;值得一提的是&#xff0c;小编分享的方法是基于R语…

自动驾驶的摩尔定律:无人驾驶的最终实现时间或在2035年丨厚势汽车

来源&#xff1a;厚势汽车 无人驾驶的真正落地时间的预测&#xff0c;近两年从非常乐观迅速转向谨慎甚至悲观。真正的无人驾驶到底还需要多久&#xff0c;无人驾驶初创公司 May Mobility 的 CEO Edwin Olson&#xff0c;针对这个问题&#xff0c;结合已有的数据做了一个推理。他…