• Redis数据类型之散列表


    Redis五大数据类型以及操作

    目录:

    一、redis的两种链接方式

    二、redis的字符串操作(string)

    三、redis的列表操作(list)

    四、redis的散列表操作(类似于字典里面嵌套字典)

    五、redis的集合操作(set)

    六、redis的有序集合操作(zset)

    一、redis的两种链接方式

    1、简单连接

    import redis
    conn = redis.Redis(host='10.0.0.200',port=6379)
    conn.set('k1','年后')
    print(conn.get('k1'))

    2、连接池

    如果要连接redis的时候推荐用连接池的方式;如果每次操作都用同一个链接,可以用连接池链接

    redis使用connection pool来管理对一个redis服务的所有连接,避免每次建立,释放连接的开销。默认 ,每个redis实例都会维护一个自己的链接池。可以直接建立一个连接池,

    然后作为参数redis,这样就可以实现多个redis实例共享一个连接池。

    复制代码
    #连接池
    import redis
    pool = redis.ConnectionPool(host='10.0.0.200',port=6379)
    conn = redis.Redis(connection_pool=pool)
    
    conn.set('a','lalla')
    print(conn.get('a'))
    复制代码

    举例

    pool.py

    import redis
    POOL = redis.ConnectionPool(host='10.0.0.200',port=6379)

    view.py

    复制代码
    from django.shortcuts import render,HttpResponse
    import redis
    from app01.pool import POOL
    # Create your views here.
    def index(request):
        pool = redis.Redis(connection_pool=POOL)  #连接redis
        return HttpResponse('ok') 
    
    def home(request):
        pool = redis.Redis(connection_pool=POOL)
        return HttpResponse('ok')
    复制代码

    3、Django-redis组件

    安装:pip install django-redis

    配置文件

    复制代码
    CACHES = {
        "default": {
            "BACKEND": "django_redis.cache.RedisCache",
            "LOCATION": "redis://10.0.0.200:6379",
            "OPTIONS": {
                "CLIENT_CLASS": "django_redis.client.DefaultClient",
                #"PASSWORD": "asdfasdf",
            }
        }
    }
    复制代码

    使用:

    复制代码
    #利用django-redis组件进行连接
    from django.core.cache import caches
    import os
    import django_redis
    os.environ['DJANGO_SETTINGS_MODULE'] = 'redis之集合练习.settings'
    
    conn = django_redis.get_redis_connection()
    conn.set('b','666')
    复制代码

    二、redis的字符串操作(string)

    String操作,redis中的String在在内存中按照一个name对应一个value来存储。

    1、set(name, value, ex=None, px=None, nx=False, xx=False)  #设置值

    在Redis中设置值,默认,不存在则创建,存在则修改
    参数:
         ex,过期时间(秒)
         px,过期时间(毫秒)
         nx,如果设置为True,则只有name不存在时,当前set操作才执行
         xx,如果设置为True,则只有name存在时,岗前set操作才执行

    2、setnx(name, value)

    设置值,只有name不存在时,执行设置操作(添加)  #相当于只是添加,不能进行修改操作

    3、setex(name, value, time)

    # 设置值
    # 参数:
        # time,过期时间(数字秒 或 timedelta对象)

    4、psetex(name, time_ms, value)

    # 设置值
    # 参数:
        # time_ms,过期时间(数字毫秒 或 timedelta对象)

    5、mset(*args, **kwargs)

    批量设置值
    如:
        mset(k1='v1', k2='v2')
        或
        mset({'k1': 'v1', 'k2': 'v2'})

    6、get(name)  获取值

    7、mget(keys, *args)

    批量获取
    如:
        mget('ylr', 'zzz')
        或
        r.mget(['ylr', 'zzz'])

    8、getset(name, value) 设置新值并获取原来的值

    9、getrange(key, start, end)

    # 获取子序列(根据字节获取,非字符)
    # 参数:
        # name,Redis 的 name
        # start,起始位置(字节)
        # end,结束位置(字节)
    # 如: "拉销量" ,0-3表示 "拉"

    待续。。

    三、redis的列表操作(list)

    四、redis的散列表操作

    Hash操作,也叫做散列表操作。redis中Hash在内存中的存储格式如下图:

    1、hset(name, key, value)

    复制代码
    # name对应的hash中设置一个键值对(不存在,则创建;否则,修改)
     
    # 参数:
        # name,redis的name
        # key,name对应的hash中的key
        # value,name对应的hash中的value
     
    # 注:
        # hsetnx(name, key, value),当name对应的hash中不存在当前key时则创建(相当于添加)
    复制代码

    2、hmset(name, mapping)

    复制代码
    # 在name对应的hash中批量设置键值对
     
    # 参数:
        # name,redis的name
        # mapping,字典,如:{'k1':'v1', 'k2': 'v2'}
     
    # 如:
        # r.hmset('xx', {'k1':'v1', 'k2': 'v2'})
    复制代码

    3、hget(name,key)

    # 在name对应的hash中获取根据key获取value

    4、hmget(name, keys, *args)

    复制代码
    # 在name对应的hash中获取多个key的值
     
    # 参数:
        # name,reids对应的name
        # keys,要获取key集合,如:['k1', 'k2', 'k3']
        # *args,要获取的key,如:k1,k2,k3
     
    # 如:
        # r.mget('xx', ['k1', 'k2'])
        # 或
        # print r.hmget('xx', 'k1', 'k2')
    复制代码

    5、hgetall(name)  获取name对应的hash中的所有键值

    6、hlen(name)  获取name对应的hash中键值对的个数

    7、hkeys(name) 获取name对应的hash中所有的key的值

    8、hvals(name) 获取name对应的hash中所有的value的值

    9、hexists(name, key) 检查name对应的hash是否存在当前传入的key

    10、hdel(name,*keys)  将name对应的hash中指定key的键值对删除

    11、hincrby(name, key, amount=1)   吧原来的值自加1

           hincrby ('xxx','slex',amount=-1) #吧原来的值自减1

    # 自增name对应的hash中的指定key的值,不存在则创建key=amount
    # 参数:
        # name,redis中的name
        # key, hash对应的key
        # amount,自增数(整数)

    12、hincrbyfloat(name, key, amount=1.0) 支持浮点型的

    13、hscan(name, cursor=0, match=None, count=None)

    复制代码
    # 增量式迭代获取,对于数据大的数据非常有用,hscan可以实现分片的获取数据,并非一次性将数据全部获取完,从而放置内存被撑爆
     
    # 参数:
        # name,redis的name
        # cursor,游标(基于游标分批取获取数据)
        # match,匹配指定key,默认None 表示所有的key
        # count,每次分片最少获取个数,默认None表示采用Redis的默认分片个数
     
    # 如:
        # 第一次:cursor1, data1 = r.hscan('xx', cursor=0, match=None, count=None)
        # 第二次:cursor2, data1 = r.hscan('xx', cursor=cursor1, match=None, count=None)
        # ...
        # 直到返回值cursor的值为0时,表示数据已经通过分片获取完毕
    复制代码

    14、hscan_iter(name, match=None, count=None)

    复制代码
    # 利用yield封装hscan创建生成器,实现分批去redis中获取数据
     
    # 参数:
        # match,匹配指定key,默认None 表示所有的key
        # count,每次分片最少获取个数,默认None表示采用Redis的默认分片个数
     
    # 如:
        # for item in r.hscan_iter('xx'):
        #     print item
      # for item in r.hscan_iter('xx',match='*lx'):  #匹配以lx结尾的
        #     print item
     
    复制代码

    五、redis的集合操作

    六、redis的有序集合操作

     

  • 相关阅读:
    【转】 【技巧 】 数学难题大揭秘:减少计算错误的技术
    [转]Mathematical Induction --数学归纳法1
    Vector Calculus
    test latex1
    [转]架构蓝图--软件架构 "4+1" 视图模型
    What Is Mathematics?
    二项式展开
    游戏系统设计
    Golang游戏服务器与skynet的个人直观比较
    [转]透过 Linux 内核看无锁编程
  • 原文地址:https://www.cnblogs.com/mqhpy/p/11372086.html
Copyright © 2020-2023  润新知