• redis 基础应用


     
     
     
    redis 安装
       -redis安装  
      -window的安装
      -redis支持5大数据类型
        -字符  Memcached 只支持字符串类型
        -列表
        -字典
        -集合
        -有序集合  
      -可以持久化,单线程,单进程(10w)

      -py操作reddis

        
    -安装模块pip3 install redis
     
      redis链接:
    import redis

    # 拿到一个redis链接
    coon = redis.Redis(host='127.0.0.1',port=6379)

    # pool为单例模式 连接池
    pool = redis.ConnectionPool(host='127.0.0.1',port=6379)

    # 从链接池 去一个链接
    conn = redis.Redis(connection_pool=pool)



    redis字符串操作

    # ex,过期时间(秒)
    # px,过期时间(毫秒)
    # nx,如果设置为True,则只有name不存在时,当前set操作才执行,反之则不执行
    # xx,如果设置为True,则只有name存在时,当前set操作才执行,值存在才能修改,反之不进行更新
    conn.set('name', 'egon', nx=True)



    import datetime
    v=datetime.timedelta(weeks=2)
    ctime=datetime.datetime.now()
    ctime+v

    # 设置值,只有name不存在时,执行设置操作(添加),如果存在,不会修改 过期时间为5秒
    conn.setex('ttt', 5,'xxx')


    # 批量插入
    conn.mset({"k1": 'v1', "k2": 'v12', "k3": 'v3'})

    # 可自动识别列表
    value1=conn.mget('name','k1','k2')
    value2=conn.mget(['name','k1','k2'])

    # 设置新值并获取原值
    print(conn.getset('name','xxxxxx'))

    # 获取子序列(开始字节 结束字节)
    conn.getrange('name',1,2)

    # 修改字符串内容(指定索引后替换)
    conn.setrange('name', 1, 'eerrrrrrrrrrrrrrrr')

    # 查询对应值字节长度
    print(conn.strlen('name'))

    # 自增(需要在此之前set)
    conn.incr('age',-4)

    # 追加 在name中追加内容
    conn.append('name','0000000')


    redis字典操作

    # 插入或修改字典
    conn.hset('person','age','18')

    # 批量插入字典
    conn.hmset('person2',{'age':'19','name':'egon','xx':'xx'})

    # 在name对应的hash中获取根据key获取value
    print(conn.hget('person','name'))

    # 在name对应的hash中获取多个key的值
    print(conn.hmget('person2',['age','name','xx']))

    # 获取name对应hash的所有键值
    print(conn.hgetall('person'))

    # 获取name对应的hash中键值对的个数
    print(conn.hlen('person'))

    # 获取name对应的hash中所有的key的值
    print(conn.hkeys('person'))

    # 检查name对应的hash是否存在当前传入的key
    print(conn.hexists('person','nameee'))

    # 将name对应的hash中指定key的键值对删除
    conn.hdel('person2','name','age')

    # 自增name对应的hash中的指定key的值,不存在则创建key=amount
    conn.hincrby('person','age')

    for i in range(1000000):
    conn.hmset('person2',{'eeeeee%s'%i:i})
    # 如果数据量不大,自动全取出来
    cour2 = 0
    count = 1
    while True:
    cour2, data2 = conn.hscan('person2', cursor=cour2, match=None, count=3000)
    count += len(data2)
    if cour2 == 0:
    break
    # 不用getall的方式取,用这种方式取,也能把所有数据取出来,但是不会吧内存撑爆
    data=conn.hscan_iter('person2', match=None, count=100)
    # 内部有915371条数据
    # 先去取100条
    # 做成了生成器
    # 取值的时候,100以内,没有再去查,用的是生成器
    # 当超过一百,再去取100条.做成了生成器
    for i in data:
    print(i)





    redis操作列表


    # 添加元素在列表的最左边
    conn.lpush('list','2')

    # 添加元素在列表的最右边
    conn.rpush('list','3')

    # 只有name已经存在时,值添加到列表的最左边
    conn.lpushx('list2','3')

    # 列表list元素个数
    print(conn.llen('list'))

    # 在列表list 第三个值前/后插入一个新值
    conn.linsert('list', 'after', "3", '444444')
    conn.linsert('list', 'before', "3", '5555555')

    # 对列表中索引值进行重新赋值
    conn.lset('list',4,'66666666')

    # 删除指定值
    conn.lrem('list',0,"3")

    # 删除列表左(右)侧第一个值并返回该值
    print(conn.lpop('list'))
    print(conn.rpop('list'))

    # 按索引取值,支持负索引
    print(conn.lindex('list',-2))

    # 将多个列表排列,按照从左到右去pop对应列表的元素
    # 可以用于简单的分布式爬虫
    print(conn.blpop('list'))

    # 批量插入数据
    conn.lpush('list',*[1,2,3,4,45,5,6,7,7,8,43,5,6,768,89,9,65,4,23,54,6757,8,68])

    # 在list对应的列表元素分片获取数据
    print(conn.lrange('list',0,-1))

    # 自定义列表的增量迭代
    def scan_list(name,count=2):
    index=0
    while True:
    data_list=conn.lrange(name,index,count+index-1)
    if not data_list:
    return
    index+=count
    for item in data_list:
    yield item
    # print(conn.lrange('test',0,100))
    for item in scan_list('list',5):
    print(item)




    redis模拟事物
    # 事务(不支持事务,但是通过管道模拟)
    conn=redis.Redis(host='127.0.0.1', port=6379)

    # # 拿到一个管道,transaction=True表示管道内部都是原子性
    pi=conn.pipeline(transaction=True)

    # # 说明是批量命令
    pi.multi()
    pi.set('xx','xxx')
    pi.set('yy','yyy')
    pi.execute()

    redis其他操作

    # 其它操作
    conn.delete('name1')

    # 根据key值模糊查询
    print(conn.keys('k*'))

    # 对redis中的某一个name设置超时时间
    exprie(name,time)

    # # 将多个列表排列,按照从左到右去pop对应列表的元素
    print(conn.type('person'))
    
    



    
    
    
    
     
     
     
     
     
  • 相关阅读:
    气象数据之风向数据json格式解析
    气象数据之风向数据展示原理
    js之生成json文件
    气象数据之grib2转json
    气象数据之全球方向数据(grib2)下载
    气象数据之数据查看(panoply)
    arcgis js 3.x 之弹框拖动后添加引导线
    arcmap加载netcdf(.nc)数据
    ol3之测试项目
    ol3之加载arcgis wms图层
  • 原文地址:https://www.cnblogs.com/yanhui1995/p/9995172.html
Copyright © 2020-2023  润新知