geew
V2EX  ›  问与答

[redis]缓存性能

  •  
  •   geew · Nov 15, 2013 · 3763 views
    This topic created in 4590 days ago, the information mentioned may be changed or developed.
    缓存做得不多, 之前是看的资料上说提高性能必须得做缓存.
    但在项目里用了缓存之后发现性能没有多大的提升, 有时候甚至比不用缓存还要差些?

    是我的使用方法有问题吗还是??

    比如我缓存一个对象(字典):
    这样做的:
    # 存
    conn = redis.Redis(**kwargs)
    redis_data = cPickle.dumps(data)
    conn.set(key, redis_data)

    # 取
    redis_data = conn.get(key)
    data = cPickle.loads(redis_data)

    这样的存取增加了一个中间的编码解码的过程, 感觉这一过程是可以替换的吧, 但是用什么替换呢?
    redis存储对象的时候必须要编码吗?有些对象是不能直接存的. 取出来的值都是字符串, 必须解码才行?

    怎么才是正确的使用方法呢??
    12 replies    1970-01-01 08:00:00 +08:00
    clino
        1
    clino  
       Nov 15, 2013
    用pickle我觉得是合适的做法,因为比如在python,数据是以python内部数据的方式存在的,在序列化之前是无法转给其他程序/进程处理的
    geew
        2
    geew  
    OP
       Nov 15, 2013
    @clino 但是pickle dumps和loads会消耗一定的时间
    hepochen
        3
    hepochen  
       Nov 15, 2013
    是每次存取都新建了一个连接还是使用连接池的?如果是前者,每次新建TCP连接是有系统开销的。

    另外,cPickle、unicode、zip、base64等,这些编码解码的效率是很高的,不会是瓶颈的。我自己用了多年的Mac上,一秒钟都能处理过亿的字节...
    nybux
        4
    nybux  
       Nov 15, 2013
    缓存是相对与数据库来说的,你这对象是从数据库取的吗?
    sarowlwp
        5
    sarowlwp  
       Nov 15, 2013
    这是啥用法,把字典序列化到 redis,然后用的时候 取出来再 反序列化成字典?
    geew
        6
    geew  
    OP
       Nov 15, 2013
    @hepochen 有连接池, 没有每次连接的开销.现在发现的响应时间是使用缓存会比没有使用缓存满5ms左右,感觉有些奇怪
    geew
        7
    geew  
    OP
       Nov 15, 2013
    @nybux 是的
    geew
        8
    geew  
    OP
       Nov 15, 2013
    @sarowlwp 因为从redis取出来都是字符串. 之前有用过eval来进行对象还原, 但是有错误. 所以才用的序列化
    clino
        9
    clino  
       Nov 15, 2013
    @geew eval这种肯定不太好
    pickle对于不跨语言是好的选择
    如果要跨语言或者要可读性,可以用json,呵呵
    geew
        10
    geew  
    OP
       Nov 15, 2013
    @clino 试过json, 但是dump某些对象的时候会报错, 比如datetime.datetime
    sarowlwp
        11
    sarowlwp  
       Nov 16, 2013
    @geew 如果是字典的话,为什么不直接用redis的api,redis本身是支持字典存储的,建议楼主看看文档 http://redis.io
    geew
        12
    geew  
    OP
       Nov 16, 2013
    @sarowlwp 要是字典里面有其他的对象呢?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1141 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 23:10 · PVG 07:10 · LAX 16:10 · JFK 19:10
    ♥ Do have faith in what you're doing.