• 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的订阅者会收到

  • 相关阅读:
    macOS npm install -g npm失败提示无权限
    js中的展开运算符
    vite启动项目
    export与export default区别
    vue3新特性拾遗
    isRef, isReactive 与 isReadonly的原理
    shallowReactive与reactive的原理浅析
    shallowReadonly 与 readonly原理浅析
    shallowRef与ref的原理浅析
    设计模式-资料相关
  • 原文地址:https://www.cnblogs.com/yoyovip/p/5826161.html
Copyright © 2020-2023  润新知