Redis

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

端口号6379

一、Redis的安装

下载redis-3.2.3.tar.gz

tar zxvf redis-3.2.3.tar.gz

cd redis-3.2.3

make,如果出错,使用 make MALLOC=libc

二、Redis的启动

cd redis-3.2.3/src

./redis-server

三、客户端的启动

cd redis-3.2.3/src

[root@xilehang src]# ./redis-cli 

127.0.0.1:6379> set name haha  #设置一个key为name,值为haha
OK
127.0.0.1:6379> get name  #获取name的值
"haha"

127.0.0.1:6379> keys *  #查看所有的key
1) "name"

四、使用python操作redis

1 import redis
2 r = redis.Redis(host='192.168.0.125')
3 
4 r.set("name","yoyo")
5 print(r.get("name"))
print(r.keys()) #获得所有key

1.set操作

setnx(name, value),只有name不存在时,执行设置操作

setex(name, value, time),设置过期时间,时间过后即删除

psetex(name, time_ms, value),设置过期时间,毫秒

mset(*args, **kwargs),批量设置值

r.mset({'k1':'v1','k2':'v2'})
print(r.mget('k1','k2'))

save 持久化

setrange(name, offset, value),修改字符串内容

1 r.set('id','123456789')
2 r.setrange('id',3,'aaa')  #第3个位置插入aaa
3 print(r.get('id'))   #123aaa789
print(r.getrange('id',3,6))  #切片
print(r.getrange('id',0,-1))  #0到所有
1 r.set('id','3')
2 r.setbit('id',5,1)  #设置二进制第五位为1
3 print(r.getbit('id',6))  #获取第六位
4 print(r.get('id'))
1 n='371'
2 r.set('t',n)
3 for i in n:
4     print(i,ord(i),bin(ord(i)))  #打印ascii码,二进制码
5 r.setbit('t',4,1)  #第四位设置为1
6 print('res:',r.get("t"))  #打印结果

incr(self, name, amount=1),自增,每次增加一

r.incr('count',1)  #自增
print(r.get('count'))

decr(self, name, amount=1),自减

append(key, value),追加内容

 hset(name, key, value),设置键值对

1 r.hset("stu_info","stu1","sanjiang")
2 r.hset("stu_info","stu2","rain" )
3 r.hmset("stu_info",{'stu3':'chunyun','stu4':'yoyo'})  #批量设置
4 print(r.hget("stu_info","stu3"))
5 print(r.hgetall("stu_info"))  #查看所有

hlen(name),获取键值对的个数

hkeys(name),获取key的值

hvals(name),获取value的值

hdel(name,*keys),删除指定键值对

列表操作

lpush(name,values)

1 r.lpush('li','11','22','33')
2 r.lpushx('li','44')  #从最左边插入44
3 r.linsert('li','BEFORE','22',"55")  #22的前面插入55
4 r.lrem('li','22',num=0)  #删除列表中所有的22
5 r.lpop('li')  #删除左侧第一个元素
6 r.lindex('li',2)  #根据索引获取元素
7 print(r.llen('li'))  #打印元素个数
8 r.rpoplpush("li","aa")  #从一个列表取出最右边的元素,同时将其添加至另一个列表的最左边
9 print(r.lrange("li",0,-1))  #根据索引获取元素

 set集合

 1 r.sadd('set','11','22','33')  #set集合
 2 r.sadd('s2','11','22','44')  #set集合
 3 print(r.sdiff('set','s2'))  #在第一个集合不在第二个集合中的元素集合
 4 r.scard('set')  #获取元素个数
 5 r.sdiff("set_list","s2")  #两个列表对比差集
 6 r.sdiffstore("s3","s1"."s2")  #1和2的差集存给3
 7 r.sinter("set_list","s2")  #获取交集
 8 r.sismember("s2",10)  #判断是否是集合的成员
 9 r.smove("s2","s3",10)  #把2中的10移到3中
10 r.sunion("s1","s2","s3")  #获取3个列表的并集

有序集合

1 r.zadd('z1',"yoyo","10","rose","5")  #有序集合
2 r.zadd('z1',"nima","3","jack","20")
3 r.zincrby("z1","nimei")  #自增
4 r.zrangebyscore("z1",20,100)
5 print(r.zscan("z1"))

 五、发布与订阅

 1 import redis
 2 
 3 class RedisHelper(object):
 4 
 5     def __init__(self):
 6         self.__conn = redis.Redis(host='192.168.0.125')
 7         self.chan_sub = 'fm103.9'
 8         self.chan_pub = 'fm103.9'
 9 
10     def public(self, msg):
11         self.__conn.publish(self.chan_pub, msg)
12         return True
13 
14     def subscribe(self):
15         pub = self.__conn.pubsub()   
16         pub.subscribe(self.chan_sub)    
17         pub.parse_response()    
18         return pub

发布者

1 from redis_helper import RedisHelper
2 obj = RedisHelper()
3 obj.public('hello')

订阅者

1 from redis_helper import RedisHelper
2 
3 obj = RedisHelper()
4 redis_sub = obj.subscribe()
5 
6 while True:
7     msg= redis_sub.parse_response()
8     print (msg)  #有消息打印,没消息阻塞

r.publish("fm103.9","hello")  #发送消息,fm103.9的订阅者会收到

 

posted @ 2016-09-13 15:23  yoyoua  阅读(178)  评论(0编辑  收藏  举报