redis 各种数据类型 简单应用

1人收藏此文章, 


发表于1小时前(2013-09-10 16:45) ,
已有19次阅读 ,共0个评论

 

直接上代码吧 (python代码部分使用的是redis-py)

  • STRING 类似memcache
    from redis import client # 这个很重要, 从redis中导入client
    
    import msgpack
    
    """用key-obj(string)方式存储
    类似memcache, 主要管理好key,要唯一
    """
    r = client.Redis() # 默认
    # r = client.Redis(self, host='localhost', port=6379, db=0, password=None, socket_timeout=None, connection_pool=None, charset='utf-8', errors='strict', decode_responses=False, unix_socket_path=None)
    # r = client.StrictRedis.from_url("redis://127.0.0.1:6381")
    obj = {12:3}
    value = msgpack.packb(obj)
    r.set("key", value)
    
    value = r.get("key") # drivercount_epid2names
    obj = msgpack.unpackb(value)
    
    print obj
    # result: 
    # {12:3}
  • LIST 类似stl 的deque(双端队列),和python的list一样灵活, 详见<http://redis.io/commands#list>
    """LIST(列表) [1,2,3,4] [L <---> R]
    RPUSH 在最后面添加元素
    LPUSH 在最前面添加元素
    BLPOP/BRPOP 阻塞删除,挺有意思
    RPUSH mylist "hello"
    RPUSH mylist "world"
    LRANGE mylist 0 1 (key:start stop)(L -> 表示list)(第一个(最L)索引0,队尾(最R)索引为-1, 类似python)
    LRANGE mylist 0 -1 >>>表示显示全部数据(因为0表示第一个(队头), -1表示最后一个(队尾))
    LLEN 获取LIST的大小
    RPOP 删除最后一个元素
    LPOP 删除第一个元素
    """
    r = client.Redis()
    r.rpush("mylist", "1")
    r.rpush("mylist", "2")
    r.rpush("mylist", "3") #          L       R   
    r.rpush("mylist", "4") #  array : [1,2,3,4]
    
    r.lrange("mylist", 0, 3) # r.lrange("mylist", 0, -1) / r.lrange("mylist", 0, 100) 超过数组(list)大小不报错 >>>非常类似python
    # result: ['1', '2', '3', '4']
  • HASH 可以模拟非key – value 模式
    """用hash方式存储
    hashname - field1:name1
    hashname - field2:name2
    HMSET epid-name epid 车牌名 #eg.   HMSET epid-name JY29952603 豫P5Z1xx JY29947573 豫P5Z2xx
    HMGET epid-name epid       #eg.    HMGET epid-name JY29952603 299475xx
    """
    r = client.Redis()
    r.hmset("epid-name", {"JY29952603":"豫P5Z1xx", "JY29947573":"豫P5Z2xx"})
    result = r.hmget("epid-name", ("JY29952603", "JY29947573"))
    
    print result
    # result:
    # ['\xe8\xb1\xabP5Z1xx', '\xe8\xb1\xabP5Z2xx']

     

  • SET 集合 三要素(确定, 互异, 无序)
    r = client.Redis()
    """SET(集合) 和python set类似
    SADD key value [..] 添加(->> set.add())
    SPOP key 随机(尼玛..)删除(并返回 貌似redis删除都会返回)
    SCARD key 取大小(->> len(set))
    集合运算:
    SDIFF set1 set2 集合差 (->> set1 - set2)
    SDIFFSTORE set3 set1 set2 集合差,并把结果存在第一个参数(第一个key)中
    SINTER set1 set2 集合交 (->> set1 & set2)
    SINTERSTORE set3 set1 set2 集合交并存储
    SUNION set1 set2 集合并 (->>set1 | set2)
    SUNIONSTROE ..
    
    SRANDMEMBER key [count] (尼玛,)随机获取count个
    SISMEMBER key number 判断元素是否属于集合
    SMEMBERS key 获取集合所有元素
    """
    # 由于和python很像, 就不上代码了
  • Sorted Set 带有权值的集合 命令都以Z打头
  • Sub/Pub 发布订阅模式 
    """消息订阅,消息发布模式(SUBSCRIBE/PSUBSCRIBE,PUBLISH)
    SUBSCRIBE channel_name # 订阅通道channel_name的消息
    PUBLISH channel_name "data" # 向通道channel_name发布消息
    """
    # 订阅者
    conn_pool = client.ConnectionPool()
    sub = client.PubSub(conn_pool)
    
    sub.subscribe('xinwen-junshi')
    sub.subscribe('xinwen-guoji')
    for msg in sub.listen():
        print msg
    
    # 发布者
    # 在另一个进程中运行
    r = client.Redis()
    r.publish("xinwen-junshi", "dadaoxiaoriben")
    
  • ing


声明:OSCHINA 博客文章版权属于作者,受法律保护。未经作者同意不得转载。


分享到: 微信 更多