直接上代码吧 (python代码部分使用的是redis-py)
- STRING 类似memcache
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}
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 类似stl 的deque(双端队列),和python的list一样灵活, 详见<http://redis.io/commands#list>
"""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']
"""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']
"""用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很像, 就不上代码了
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打头 类似<多重集> 关于多重集可以参照 <离散数学及其应用第四版>p82 习题46: "有时一个元素在一个无序集中出现的次数也有意义.当同一个元素作为成员可以出现不止一次,这个无序元素集就是多重集.符号{m1.a1, m2.a2,...,mr.ar},整数mi称为ai的重数,i=1,2,...,r.",多重集的应用可以参照习题48.
"""消息订阅,消息发布模式(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")
"""消息订阅,消息发布模式(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")
- ing
不要忘了最后 del client 来关闭redis