zoukankan      html  css  js  c++  java
  • (转)Redis使用场景及使用经验

    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经验

  • 相关阅读:
    【解题报告】2019正睿Day2
    如何卡SPFA
    【游记】2019国庆清北刷题营
    CF427D Match & Catch
    P2178 [NOI2015] 品酒大会
    Loj#6071. 「2017 山东一轮集训 Day5」字符串
    SP8093 JZPGYZ
    P3346 [ZJOI2015]诸神眷顾的幻想乡
    CF1037H Security
    CF932F Escape Through Leaf
  • 原文地址:https://www.cnblogs.com/yewg/p/5586253.html
Copyright © 2011-2022 走看看