zoukankan      html  css  js  c++  java
  • Redis in python

    什么是Redis

      数据库类型分为两种,关系型和非关系型,Redis是一个非常重要的非关系型数据库。

      既然是数据库,就是存储数据的一个空间,或者说是一个软件,非关系就是不再按照一对一多对多等结构进行外键关联,而是通过“key-value“进行数据存储。

      接下来对比着Memcached进行对比。

    Memcached与Redis对比

      - 共同点

        * Redis缓存在内存中

        * 属于”key-value“结构

      - 不同点

        * Redis可以做持久化,也就是说把数据保存在硬盘上。也是redis运用广泛的原因之一,而Memcached由于没有这一功能,这也导致了它的速度更快。

        * Redis支持丰富的数据类型,如链表,字符串,hash,集合。

    为什么使用Redis

      Redis通过指令集控制数据,网站的操作最多的就是查询操作,如博客园,如果每次查询都去硬盘上获取数据,就会导致运行速度极慢,假如我们使用msql和redis,

      加入mysql服务器崩溃,也没有巨大影响,只有做数据同步时才会有交互。

    Redis下载和安装

      下载链接

      https://github.com/MicrosoftArchive/redis/releases

      下载这没什么好说的,注意默认端口号6379,内存根据需求,不需要过大,默认是100m。

    Redis的使用

      启动Redis客户端

      

      测试

      

    在python中的使用

      对于python程序员,对于redis的理解较为容易,可以把其理解为一个字典(可以多层嵌套)。

      value可以是hash,链表,字符串等

      基本使用

        · 导入redis,import redis

        ` 获取redis对象 r_obj = redis.Redis(host,post)

        · r.set(key,value)  ,  r.get(key)

      另一种连接方式

        通过连接池的方式进行连接,避免大量的连接开销(也就是一次请求连接一次)。

        · 导入redis,import redis

        · 创建连接池,r_pool = redis.ConnectionPool()

        · 获取redis对象 r_obj = redis.Redis(connection = r_pool )

      

    Redis的字符串操作

      set

    import redis
    
    r_pool = redis.ConnectionPool()
    r_obj = redis.Redis(connection_pool = r_pool)
    r.set("name","cui",10)    #缓存的时效性,联系python内置的cache
    
    print(r_obj.get("name"))
    
    r_test1 = r_obj.setnx("name","yuan")
    
    print(r_test1)    #setnx,只有在键不存在的时候才会创建,如set方法的nx参数设置为True
    
    r_test2 = r_obj.mset(k1 = "v1",k2 = "v2")
    r_test3 = r_obj.mset({k3:"k3",k4:"v4"})
    
    print(r_test2,r_test3)
    

      get

    #接上段演示
    
    r1 = r_obj.get("name")
    
    r2 = r_obj.mget(["k1","k2"])
    
    r3 = r_obj.getset("name","zhang")    #设置新值,获取旧值
    
    r4 = r_obj。getrange("name",1,2)    #后面两个参数是切片
    
    r_obj.setrange(key,pos,value)    #覆盖性的插入
    

      strlem

    #接上段演示
    
    print(r_obj.strlen("name"))    #获取长度
    

      incr,decr

    #接上段演示
    
    r_obj.set("price","100")
    r.incr("price",9)    #加10
    
    prit(r.get("price"))
    
    r.decr("price",1)    #减1
    

      append

    r_obj.append("name",""shuai)    #追加
    
    print(r.get("name))
    

      

    Redis的List操作

      lpush

    #接上段演示
    
    r_obj.lpush("parter","菠萝赛东",”新垣结衣“)  #再次添加会在左边进行插入
    

      lrange,ltrim

    #接上段演示
    
    r_obj.lrange("partner",0,-1)    
    r_ltrim("partner",1,2)  #区别是除了取出的区间外全部删除

      linsert

    #接上段演示
    
    r_obj.insert("parnter","AFTER","abc")    #在后边插入
    

      lset

    #接上段演示
    
    r_obj.lset("partner",2,"苍老师")    #根据索引进行替换
    

      lremove

    r_obj.lremove("parter","苍老师")    #删除,还有参数定义执行次数
    

      lpop

    #接上段演示
    
    r_obj.pop("partner")    #从左第一个删除
    

      lindex

    r_obj.lindex("parnter",1)    #通过索引获取值
    

      

    Redis的Hash操作

      hset,hget,hgetall

    #可以设置连接池decode_response = True,以字符显示
    r_obj.hset("sport","ball","basketball") #可以联想嵌套字典
    r_obj.hget("sport","ball")
    r_obj.hgetall("sport")

      hmget,hmset

    r_obj.hmset("k1",{"k11":"v11","k22":"v22"})
    r_obj.hmget("k1",["k11"]})
    

      hexits,exits

    r_obj.hexits("sport","ball")    #判断是否存在
    r_obj.exits("sport")
    

      hdel

    r_obj.hdel("sport","ball")    #删除
    

     

    Redis层操作

     keys

    r_obj.keys()    #取所有的键  ,内部参数支持模糊查询,?,*,[]字符集

     delete

    r.delete("sport")
    r.delete(*r_obj.keys())  #删除所有

     expire

    r_obj.expire("sport",5)    #设置过期时间
    

      

      

  • 相关阅读:
    mac下用xattr命令来删除文件的扩展属性
    使用vue.js实现checkbox的全选和多个的删除功能
    正则表达式匹配任意字符(包括换行符)的写法
    jQuery Mobile动态刷新页面样式
    jquery mobile各类标签的refresh
    jQuery .attr()和.removeAttr()方法操作元素属性示例
    jquery mobile各类组件刷新方法
    Apache PDFbox开发指南之PDF文档读取
    日期字符串解析--SimpleDateFormat严格限制日期转换setLenient(false)
    hdu5032 Always Cook Mushroom
  • 原文地址:https://www.cnblogs.com/cuiyuanzhang/p/10151891.html
Copyright © 2011-2022 走看看