在这里就不谈redis的安装与启动啦,网上太多人写这个了。

从最近的一个项目【钻石夺宝】说起,如果大家有玩过一元夺宝或者全名夺宝的话,大概会知道如果参与人数多的话,每隔几秒、快的话每隔一秒都会新生成一期,虽然app的流量不多,但还要先确定好如何生成期数。

第一个问题来了,那怎样生成期数呢,自己想到的方法就是根据年月日时分秒毫秒 如果是在2016年08月21日11时57分30秒123毫秒生成的话,则把这些数字拼接在一起,

20160821115730123

看样子感觉不错,但是这样子真的好吗?期数肯定要是独一无二的(原子性),第二个问题来了,如果刚好有两期同时生成呢?

不要怀疑这个可能,这样子就会造成串期了。而且涉及到钱,不可以这样子马虎。思考啊思考啊,这个时候想到redis。。。

好吧,写到这里,终于和标题有一点联系了。

老实说,一开始就只想到redis的字符串命令,incr , 看到 incr这个命令,我觉得你也知道要怎样做了,利用redis 的原子性(原子意味着操作的不可再分,要么执行要么不执行),用当前日期作为键,值得话从1递增。 比如今天是2016年8月21日 一开始是长这样子的,生成299期

201608211,201608212,201608213,201608214,···,2016082110 ,```,20160821299

但是期数越多的话,就感觉越难看了,201608211,20160821299放到一起,位数都不一样。

给你们看一个数字, 86400,会不会很熟悉,这个是一天的秒数,考虑到实际上一秒一期也至少能满足目前的需求,决定除了基本的日期,再拼接5位的期数:如2016082100001。

 // js
let str = '0000' + 1
str = str.slice(str.length - 4)
console.log(str)
// 输出 00001

当然,在redis里面的话,还是1,2,3···的啦。

写到这里,正常来说应该是结束的了,但总是感觉有地方不对,如果其他同事也用了日期作为键呢,如果在这个夺宝项目中其他地方也有类似的需求呢(有的同学会说加个项目前缀不就可以了吗,虽然可以!!!),但这个时候,【sorted set】出场了,它长得帅!

语法:

ZINCRBY key increment member

以 夺宝项目【treasure】为【sorted set】的key, 以当前时间年月日为 member (成员), 每次递增1

 ZINCRBY 'treasure',1,'20160821'

如果要查看最近10天的成员以及生成的期数:

ZRANGE treasure 0 10 WithScores

为什么用sorted set 的原因不是因为帅,实际上,运营人员希望拿到了期数生成最多的日期及期数,ZREVRANGE 命令就可以做到了

语法:

ZREVRANGE key start stop [WITHSCORES]
//返回有序集中指定区间内的成员,通过索引,分数从高到底

实例:

ZREVRANGE treasure 0 10  WITHSCORES

当然还有很多理由用sorted set的!!!!

sorted set 更多用法可参见: 
http://www.runoob.com/redis/redis-sorted-sets.html


实际项目中,是用 hash set 实现的,在一个key上新增field(日期),然后递增field的值,今天写这文章的时候,一边查阅资料,一边在思考采取哪种redis的数据类型才是正确的,最终决定用sorted set替换原本的 hash set。

【hash set】 更适合 存储对象 比如 新增key

HMSET key field value [field value ...]

结合实际:

HMSET treasure_user:001 name "xiaochi" age "26"
HMSET treasure_user:002 name "zhaomei" age "25"

夺宝项目中还用到redis的【锁】,找个时间的话,也写一下为什么要用到锁,怎样用锁。

redis 实践—— sorted set, hash set的更多相关文章

  1. 节约内存:Instagram的Redis实践(转)

    一.问题:     数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求. 二.解决方案:      1.通过高速服务器Cache缓存数据库数据      2.内存数据库 三.主流解Ca ...

  2. Redis 实践笔记

    本文来自:http://www.cnblogs.com/me-sa/archive/2012/03/13/redis-in-action.html 最近在项目中实践了一下Redis,过程中遇到并解决了 ...

  3. redis字典快速映射+hash釜底抽薪+渐进式rehash | redis为什么那么快

    前言 相信你一定使用过新华字典吧!小时候不会读的字都是通过字典去查找的.在Redis中也存在相同功能叫做字典又称为符号表!是一种保存键值对的抽象数据结构 本篇仍然定位在[redis前传]系列中,因为本 ...

  4. redis的 key string hash list set sorted set 常用的方法

    redis 安装文件:  http://blog.csdn.net/tangsilai/article/details/7477961 ==============================   ...

  5. redis 与 spring整合 hash 增删改操作 list增删改操作

    本人,对于以前redis的学习是非常痛苦的!近期将以前的东西捡起来.以博客的形式存储,以便于以后快速捡起来,并和广大同胞一起分享! 1):简单介绍 redis 是基于C语言开发. redis是一个ke ...

  6. redis的sorted set类型

    1.简单描述 和set类型一样,sorted set也是string类型元素的集合,不同的是每个元素都会关联一个double类型的score.sorted set的实现是skip list和hash ...

  7. Redis 实践1- redis介绍和安装

    redis是一个key-value存储系统,官方站点 http://redis.io   和memcached类似,但支持数据持久化 支持更多value类型,除了和string外,还支持hash.li ...

  8. Basic Tutorials of Redis(5) - Sorted Set

    The last post is mainly about the unsorted set,in this post I will show you the sorted set playing a ...

  9. Redis中Value使用hash类型的效率是普通String的两倍

    什么Redis? 点击这里 最近要开发的一个项目是分布式缓存组件,解决参数缓存高效获取的问题.参数达到了500万级别,刚刚开始了解Redis.做设计的时候考虑到Value使用哪种类型的问题? 主要面临 ...

随机推荐

  1. SQL Server 2008数据库创建,备份,还原图解及注意点

    一.新建数据库 步骤1:点击“新建数据库”. 步骤2:输入数据库名称,设置数据库文件保存位置(注意点:最好自己设置数据库文件保存位置,不要采用安装时默认的文件保存位置!),点击“确认”即可完成新库的创 ...

  2. Stage3D学习笔记(五):通过矩阵操作纹理

    虽然我们上一节已经实现了正交矩阵的显示,但是可以明显的感觉到要调整显示纹理的坐标和尺寸是相当复杂的,需要对每个顶点进行操作,如果还要加上注册点和旋转的话,用上一节的方法来做是会让人发疯的! 所以我们距 ...

  3. Visual Studio动态代码生成的实现基础

    这篇文章讨论以下3个问题: 1.代码生成器应该做什么 2.大多数代码生成器的缺点 3.动态代码生成实现的基础 代码生成器应该做什么? 我认为,目标是加快项目开发,方式是减少重复代码手工操作,实现是用过 ...

  4. Android studio插件安装

    Android Studio安装插件的方式其实和Eclipse大同小异.废话不多说,直接上图: 区域1:你当前已经安装了的插件 区域2:在线安装 区域3:从硬盘安装,即针对你已经下载好了的插件,可通过 ...

  5. 【转】解决HttpServletResponse输出的中文乱码问题

    http://blog.csdn.net/simon_1/article/details/9092747 首先,response返回有两种,一种是字节流outputstream,一种是字符流print ...

  6. 根据Android架构分层推荐开发书籍

    Android系统的架构可以分为六个部分.笔者根据自己的体会为大家推荐每个部分对应的精品书籍,不喜勿喷.  1.Android Application <Android Developer Do ...

  7. [Bootstrap] 7. Working Herader

    <header class="navbar navbar-default navbar-static-top"> <div class="contain ...

  8. 跟我学solr---吐槽一下,我的文章被抄袭啦

    今天闲来无事,就在在百度上搜了下面"跟我学solr",看看这几周来自己的努力成果怎么样,不搜还好,搜了就图学了.被原封不动地抄袭了!并且抄袭的文章还在百度排名第一,我自己的却被排到 ...

  9. 用 jQuery Masonry 插件创建瀑布流式的页面(转)

    瀑布流式的页面,最早我是在国外的一个叫 Pinterest 的网站上看到,这个网站爆发,后来国内的很多网站也使用了这种瀑布流方式来展示页面(我不太喜欢瀑布流这个名字). 我们可以使用 jQuery 的 ...

  10. ant例子

    1.安装ant 下载解压→环境变量配置→cmd输入ant 出现 Buildfile: build.xml does not exist! 代表安装成功 参考文章:http://www.cnblogs. ...