首页 > 代码库 > Redis

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 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=3712 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