Redis is an open source (BSD licensed), in-memory data structure store!

刚刚结束一个游戏类的活动项目,由于预估的参与人数较多,产生的数据量会很大,为了达到更好的游戏效果,所以决定抛弃之前Mysql为主Redis为辅的存储方式,而是Redis为主,Mysql为辅(负责落地一些重要的用户数据),期间收货了很多。

一、Redis中的数据结构以及常见的使用场景

常用的Redis数据结构:

  • String  # 键值对
  • List      # 列表
  • Hash    # 哈希
  • Set      # 集合
  • Sorted Set  # 有序集合

每种数据结构都有其合适的使用场景,但是谨记 不要手里握着锤子,看什么都是钉子 。另外当存储的数据量较大时,要注意每个操作命令的时间复杂度

1、String

常用命令:  set,get,decr,incr,mget 等。

应用场景:String类型是最简单也是最常用的redis数据结构,key/value格式完全可以取代Memcached作为缓存服务器,单机的测试效果显示redis的效果更好。

set、get:最简单的数据缓存

mset、mget: 批量操作,把数据统一传回客户端,节省网络io时间

decr、incr:计数器

append命令:可以作为时间序列,配合getrange、setrange,对字符串进行操作,目前redis还木有修剪操作

setbit、getbit: 省内存的好命令,可以作为简单的布尔过滤器来判断用户是否执行过某些操作

2、List

常用命令:lpush,rpush,lpop,rpop,lrange等。

应用场景:List的应用场景很多,应用也相当广泛

lpush、lpop:天然的 队列操作 ,轻松实现队列任务,Celery的存储容器我们选的就是redis

lpush、ltrim: 显示最新 的数据,很好用的!比如:游戏上方的跑马灯,就可以用这两个命令来存储最新的50条记录

还有一些其他操作:堵塞式的blpop, lrange(O(n)), lindex(O(n)),linsert(O(n)), llen(O(1)),lrem(O(n)),lset(O(n))

3、Hash

常用命令:hget,hset,hgetall 等。

应用场景:以前在memcached中如果保存一个大的数据,经常用序列化之后保存,取出来反序列化后使用,即不经济实惠,在高并发下还存在原子性问题,在redis中, 用哈希实现,so easy啦!

hget、hset: 实现一个key对应一个数据集集合 ,数据集集合里包含多个单独的key/value键值对,操作依然是原子性的

hmget、hmset、hgetall: 批量操作,节省网络io时间哦

hincrby: 对哈希里域值,进行原子性的加1

其他操作: hdel(O(n))、 hkeys(O(n))、hexits(O(1))、hvals(O(n))、hscan(O(n))

4、Set

常用命令:
sadd,spop,smembers,sunion 等。

应用场景:set与list类似,只是set是经过去重的集合,需要一个不重复的数据结构,就要考虑考虑set

sadd: 存储一个 不重复数据 的数据集合

sunion、sdiff、sinter: 进行 集合处理 ,例如微博中,将一个用户关注的所有人放入set集合中,通过并集、交集、差集操作,实现`共同关注`、`共同喜好`、`二度好友`等功能

其他操作:srem、spop、scard、sismember、smove、srandmember

5、Sorted Set

常用命令:
zadd,zrange,zrem,zcard等

应用场景:set是无序的,而Sorted set 顾名思义,它是有序的,由key、member和score组成,需要一个有序而且不重复的数据结构,就要考虑考虑sorted set

zadd:存储一个按照score排序的数据集合,添加时自动排序,例如: 优先队列 ,普通消息的score为1,重要消息的score为2,然后工作线程可以选择按score的倒序来获取工作任务。让重要的任务优先执行。

zrange、zrangebyscore等等: 按照score顺序 获取数据集,例如:微博的时间流信息,把发布时间作为score。还可以用来 处理过期数据。 后台任务使用ZRANGE…SCORES查询排序集合,取出最新的10个项目。如果发现unix时间已经过期,则在数据库中删除条目。

zrank: 排行榜 功能,score作为投票结果

其他操作:zcard、zcount、zincrby、zrem、zscore,以及set的集合操作

先更到这里,接下来记录这次项目中的部署以及业务中用到的redis经验

(转)Redis使用场景及使用经验的更多相关文章

  1. [原]Redis使用场景及使用经验

    Redis is an open source (BSD licensed), in-memory data structure store! 欢迎转载,转载请注明出处 刚刚结束一个游戏类的活动项目, ...

  2. Redis应用场景-转载

    1.  MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的 ...

  3. <转>Redis 应用场景

    http://blog.csdn.net/hguisu/article/details/8836819 1.  MySql+Memcached 架构的问题 Memcached采用客户端-服务器的架构, ...

  4. Redis应用场景-整理

    1.  MySql+Memcached架构的问题 Memcached采用客户端-服务器的架构,客户端和服务器端的通讯使用自定义的协议标准,只要满足协议格式要求,客户端Library可以用任何语言实现. ...

  5. 详解 Redis 应用场景及原理

    本文转自https://blog.csdn.net/niucsd/article/details/50966733,描述了redis实现原理和应用场景,篇幅较长,有意学习redis的同学可耐心阅读. ...

  6. Redis应用场景(转)

    (来源:http://www.cnblogs.com/shanyou/archive/2012/09/04/2670972.html) Redis常用数据类型 Redis最为常用的数据类型主要有以下五 ...

  7. redis(二)Redis适用场景,如何正确的使用

    网络IO模型 Memcached是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程,监听线程监听网络连接,接受请求后,将连接描述字pipe 传递给worker线程,进行读写IO, ...

  8. redis使用场景

    Redis应用场景   Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作 ...

  9. Redis作者谈Redis应用场景

    Redis作者谈Redis应用场景 毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多 ...

随机推荐

  1. Android源码——Activity进程内启动

    进程内启动Activity MainActivity组件向ActivityManagerService发送一个启动SubActivityInProcess组件的进程间通信请求: ActivityMan ...

  2. 网页访问全过程剖析[转].md

    本文转载自:http://www.cnblogs.com/wenanry/archive/2010/02/25/1673368.html 原文翻译自:http://igoro.com/archive/ ...

  3. Win7 命令行强制杀死进程

    原理 1.查看当前正在运行的进程 tasklist 如下图所示 2.强制杀死映像名称为imagename的进程,映像名称可通过任务管理器或tasklist命令查看 taskkill /im image ...

  4. 前端js书写规范和维护方案

    在网上看到一篇文章,写的是怎样来维护自己写的js.感觉挺不错的,感觉代码很漂亮,转之,代码如下: /** * Created by gerry.zhong on 2016/10/11. */ var ...

  5. leggere la nostra recensione del primo e del secondo

    La terra di mezzo in trail running sembra essere distorto leggermente massima di recente, e gli aggi ...

  6. JS循环语句作业讲解(折纸、兔子生兔子、买东西组合)

    1.一张纸的厚度是0.0001米,将纸对折,对折多少次厚度超过珠峰高度8848米: varn = 0;varg = 0.0001;while(){ g= g *2; n++ (g>8848bre ...

  7. MS10-087微软OFFICE漏洞【参考拿机模拟】

    [声明:以下测试仅仅为了学习用途,模仿尝试与博主无关] 工  具:metasploit 目标机:windows xp sp3  步骤: 1.使用msf创建特殊代码的doc文档 命令: msfconso ...

  8. 本地无法启动MySQL服务,报的错误:1067,进程意外终止

    在本地计算机无法启动MYSQL服务错误1067进程意外终止 这种情况一般是my.ini文件配置出错了 首先找到这个文件: 默认安装路径 C:/Program Files/MySQL/MySQL Ser ...

  9. Java开源库

    Java SE 7 API Docs from Oracle Apache IO库操作IO与文件 2.4 XML4j 1.6.1 Json.org google-json 2.5 WindowBuil ...

  10. iptables原理

    1.iptables防火墙简介 Iptables也叫netfilter是Linux下自带的一款免费且优秀的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入.流出.流经服务器的数据包进 ...