直接上代码吧 (python代码部分使用的是redis-py)
from redis import client # 这个很重要, 从redis中导入client import msgpack # 我测试的,msgpack还没cPickle效率高,如果不跨语言就用cPickle吧 """用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 del r # 不要忘了del r来关闭redis # result: # {12:3}
"""LIST(列表) [1,2,3,4] [L <---> R] RPUSH key value [..] 在最后面添加元素 LPUSH key value [..] 在最前面添加元素 LINSERT key BEFORE/AFTER pre-value new-value 在其他位置插入 LINDEX key index 根据索引获取元素(下标访问) LSET key index value 改变所给下边元素的值 LRANGE mylist 0 1 (params: key start stop)(L -> 表示list)(第一个(最L)索引0,队尾(最R)索引为-1, 类似python) LRANGE mylist 0 -1 >>>表示显示全部数据(因为0表示第一个(队头), -1表示最后一个(队尾)) LTRIM mylist pos1, pos2 >>>表示只保留从pos1到pos2之间的列表(用途:只显示最新20条评论等) RPOP 删除最后一个元素 LPOP 删除第一个元素 BLPOP/BRPOP 阻塞删除,挺有意思(不懂得可以百度阻塞队列) LLEN mylist 获取LIST的大小 """ 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方式存储, field类似于key了 hashname - field1:name1 hashname - field2:name2 HMSET key field value [field value ...] (H -> HASH, M -> Multi) HMGET key field [field ...] HKEYS key 获取hash的所有fields(字段) HVALS key 获取hash的所有value值 HLEN key 取大小 HEXISTS key field 测试某个field是否存在 HMSET epid-name epid 车牌名 #eg. HMSET epid-name 29952603 豫P5Z148 29947573 豫P5Z201 HMGET epid-name epid #eg. HMGET epid-name 29952603 29947573 """ r = client.Redis() r.hmset("epid-name", {"29952603":"豫P5Z148", "29947573":"豫P5Z201"}) result = r.hmget("epid-name", ("29952603", "29947573")) print result # result: # ['\xe8\xb1\xabP5Z148', '\xe8\xb1\xabP5Z201']
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很像, 就不上代码了
"""消息订阅,消息发布模式(SUBSCRIBE/PSUBSCRIBE,PUBLISH) SUBSCRIBE channel_name # 订阅通道channel_name的消息 PUBLISH channel_name "data" # 向通道channel_name发布消息 """ # 订阅者 ***sub方法是client.PubSub的(注意和pub方法的区别(pub是client.Redis的)) 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")