zoukankan      html  css  js  c++  java
  • redis的基础使用等相关内容-123

    1 redis介绍

    0 cs架构,key-value存储(没有表,各种关系)
    1 redis--->是存储数据的软件,跟语言无关,纯内存数据库(所有数据都放在内存中)
    2 速度非常快,支持的数据类型多样(5 大数据类型:字符串,列表,字典,集合,有序集合)
    3 Memcached和redis比较
    -redis是单线程,单进程,数据类型丰富(只针对于 redis 6.0以下)
       -memcache多线程多进程,数据类型单一,
    3.1 redis为什么单线程,单进程速度这么快?(不会有人问了)
    -10w,生产单机6w左右
       -1 纯内存数据库
       -2 io多路复用,epoll模型(linux上支持),windows上支持select
       -3 单线程单进程,避免了线程间切换
    4 redis:开源软件,c语言写的,早起版本2w3千行,对windows不支持 6.0.6
    -在不同平台编译---》可执行文件---》执行
       -windows官方:又有大神把源码,在windows上编译--》可以允许在windows上(3.x)

    2 redis的windows安装和配置

    1 https://github.com/microsoftarchive/redis/releases
       Redis-x64-3.2.100.msi:一路下一步,安装完成
    2 6379:端口号
    3 自动创建服务,服务运行
    本质是一条命令:redis-server redis.windows-service.conf
       redis-server 配置文件  :以这个配置文件启动服务
       
    4 手动启动redis的服务端
    redis-server:服务端  
      redis-server:就启动了,但是使用的是默认配置
           redis-server 配置文件:以该配置文件启动
       redis-cli:客户端
      redis-cli:默认连接到本地的6379端口
           redis-cli -h 127.0.0.1 -p 6379
       图形化客户端:
      redis-desktop-manager:图形化客户端(收费)

     

    3 普通链接和连接池

    1 使用python连接redis
    2 pip3 install redis
    3 使用python代码连接redis服务端,python代码就是客户端,跟使用图形化界面是一样的
    GUI---》可以开发出图形化界面的redis客户端

    3.1 代码

    # 1 普通连接
    # from redis import Redis
    # # 拿到一个redis连接
    # # conn=Redis()
    # conn=Redis(host='127.0.0.1', port=6379)
    #
    # # 使用连接操作
    # conn.set('age','18')
    # conn.close()



    # 2 连接池
    # import redis
    # # 创建出一个连接池
    # pool = redis.ConnectionPool(host='127.0.0.1', port=6379,max_connections=100)
    # # 从连接池中拿一个连接
    # conn = redis.Redis(connection_pool=pool)
    # conn.set('foo', 'Bar')
    #
    # conn.close()


    # 实际应用
    import redis
    from redis_pool import POOL  # Pool是单例,
    conn=redis.Redis(connection_pool=POOL)
    conn.set('age',18)
    conn.close()

    3.2 redis_pool.py

    import redis
    POOL=redis.ConnectionPool(host='127.0.0.1', port=6379,max_connections=100)

    4 redis之string操作




    # 字符串,列表,字典

    import redis
    conn=redis.Redis()
    ### 1 set 的使用
    # name:key值
    # value:value值
    # ex:过期时间,按秒记
    # px:过期时间(毫秒)
    # nx:如果设置为True,则只有name不存在时,当前set操作才执行,值存在,就修改不了,执行没效果
    # xx:如果设置为True,则只有name存在时,当前set操作才执行,值存在才能修改,值不存在,不会设置新值
    # conn.set('name','egon')
    # conn.set('name','lqz',nx=True)
    # conn.set('name','lqz',xx=True)
    # conn.set('age','18',xx=True)


    ## 2 get
    # res=conn.get('name')
    # print(res) # 返回的数据是byte格式


    ##3 setnx(name, value)
    # 设置值,只有name不存在时,执行设置操作(添加),如果存在,不会修改
    # conn.setnx('name','egon')

    ##4 setex(name, time,value, )
    # conn.setex('name',3,'egon')


    ## 5 mset

    # conn.mset({'name':'lqz','age':19,'sex':'男'})
    ## 6 mget

    # res=conn.mget('name','age')
    # res=conn.mget(['name','age'])
    # print(res)


    ## 7 getset(name, value)
    # 一次网络io,完成了取值和设置
    # res=conn.getset('name','egon')
    # print(res)

    ## 8 getrange(key, start, end)

    # 前闭后闭区间
    # res=conn.getrange('name',0,4)
    # 最终效果跟上面一样
    # res=conn.get('name').decode('utf-8')
    # print(res[0:5])
    # print(res)


    # setrange(name, offset, value)
    # conn.setrange('name',0,'tt')
    # conn.setrange('name',5,'tt')
    # conn.setrange('name',7,'ttttttttttttttttttttttttt')


    # setbit(name, offset, value)
    # conn.set('n1','foo')
    #那么字符串foo的二进制表示为:01100110 01101111 01101111
    # conn.setbit('n1',7,1)
    # #那么字符串foo的二进制表示为:01100111 01101111 01101111
    # res=conn.get('n1')

    # getbit(name, offset)
    # 获取bit位的第几个位置,看是1还是0
    # res=conn.getbit('n1',7)
    # print(res)


    # bitcount(key, start=None, end=None)
    # end:指的是bytes,前闭后闭区间
    # res=conn.bitcount('n1',0,1)
    # print(res)



    ### incr 重点
    # 每次自增1
    # 统计网页访问量,文章阅读量,粉丝数量,计数相关(不会存在并发安全的问题)
    # conn.incr('age',-2)
    # res=conn.get('age')

    # conn.decr('age')
    # res=conn.get('age')
    # print(res)


    # append
    # conn.append('name','lqz')
    #
    # res=conn.get('name')
    # print(res)
    #
    # conn.close()


    ## 总结
    # set:超时时间,nx,xx
    # get
    # mset
    # mget
    # incr
    # decr
    # getrange
    # setrange
    # append

     

    5 redis之hash操作

     字典(字典,在内存中如何存储的),hash类型
    import redis
    conn=redis.Redis()

    # hset
    # conn.hset('userinfo','name','lqz')
    # conn.hset('userinfo','age','18')
    # conn.hset('userinfo','sex','男')

    # hmset
    # conn.hmset('userinfo_2',{'name':'egon','age':18,'sex':'男'})

    #hget
    # res=conn.hget('userinfo','name')

    # hmget
    # res=conn.hmget('userinfo','age','name')
    # res=conn.hmget('userinfo',['age','name'])

    # hgetall
    # res=conn.hgetall('userinfo')


    # hlen(name)
    # res=conn.hlen('userinfo')

    # hkeys(name)
    # res=conn.hkeys('userinfo')
    # hvals(name)
    # res=conn.hvals('userinfo')


    # hexists(name, key)
    # res=conn.hexists('userinfo','hobby')
    # res=conn.hexists('userinfo','name')

    #hdel
    # res=conn.hdel('userinfo','name','age')

    #hincrby
    # res=conn.hset('userinfo','age',19)
    # conn.hincrby('userinfo','age')
    # res=conn.hget('userinfo','age')


    # hscan

    # for i in range(1000):
    #     conn.hset('test','test_'+str(i),str(i))

    # 不建议使用
    # res=conn.hgetall('test')

    # 不怎么用

    # name,redis的name
    # cursor,游标(基于游标分批取获取数据)
    # match,匹配指定key,默认None 表示所有的key
    # count,每次分片最少获取个数,默认None表示采用Redis的默认分片个数


    res=conn.hscan('test',cursor=478,count=500)
    print(res)
    # print(len(res[1]))

    # hscan_iter

    # res=conn.hscan_iter('test',count=10)



    # 以后要使用hgetall的时候,要使用如下方式
    for item in conn.hscan_iter('test',count=10):
       print(item)


    # print(res)


    conn.close()



    ## 总结
    '''
    hset
    hget
    hmset
    hmget
    hincrby
    hdel
    hexists

    hscan_iter/hgetall 区分

    '''

     

  • 相关阅读:
    力拓题目 5-8-575,657,707,771
    力拓题目1-4-7,217,344,557
    解码,编码,文件的基本操作
    集合类型内置方法和拷贝浅拷贝深拷贝
    列表元祖字典内置方法
    数字类型内置方法
    字符串类型内置方法
    hdu2262 高斯消元
    hdu1757 构造矩阵
    poj1222 高斯消元
  • 原文地址:https://www.cnblogs.com/usherwang/p/14237857.html
Copyright © 2011-2022 走看看