首页 > 代码库 > Redis
Redis
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
端口号6379
一、Redis的安装
下载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 redis2 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个位置插入aaa3 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) #设置二进制第五位为13 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) #第四位设置为16 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‘) #从最左边插入443 r.linsert(‘li‘,‘BEFORE‘,‘22‘,"55") #22的前面插入554 r.lrem(‘li‘,‘22‘,num=0) #删除列表中所有的225 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 True13 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 RedisHelper2 obj = RedisHelper()3 obj.public(‘hello‘)
订阅者
1 from redis_helper import RedisHelper2 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的订阅者会收到
Redis