zoukankan      html  css  js  c++  java
  • Redis 简介

    1. 简介

    1key-value存储系统,key为字符串类型,只能通过key对value进行操作
    
    2、支持的数据类型
    String: 字符串
    Hash: 散列
    List: 列表
    Set: 集合
    Sorted Set: 有序集合
    
    3、支持组从同步,数据从主服务器上向任意从服务器上同步
    
    4、事务,允许一组命令在单一步骤下执行
    
    5、原子性,都执行或都不执行
    

    2. redis与mysql关系

    • 存储区域:内存 硬盘
    • redis 适合存放频繁使用的数据,由于在内存读取速度快,如:排行榜,计数; MySQL 存储冷数据
    • mysql(主)+redis(辅),redis当做缓存来处理数据,与用户交互时查数据优先去redis,再去mysql
    • 数据类型少,查询功能弱,开发效率较低,是个高速存储器,适合做缓存使用

    3. 基本操作

    • string
    1、创建单个值set,多个值mset
    import redis
    r=redis.Redis (host='127.0.0.1',port=6379)
    r.set('foo','Bar')
    2、取单个值get,取多个值mget
    print(r.mget('k3','k4'))   # 根据key 取多个值
    3、strlen.key   #通过key取对应value值的长度
    4、getrange(key, start, end) #切片获取指定的值
    5、setrange(key,offset, value) # 修改值  指定索引offset修改成value
    6、print(r.incr('nam',amount=4)) 
    # 自增,key值存在在原有的值上加amount,key 值不存在创建key:amount
    7、append(key, value) #追加
    • Hash
    1、创建hset(name, key, value) 
    2、批量创建 hmest(name,{'k1':'v1', 'k2': 'v2'})
    3、hget 取单个; hmget 取多个值
    4、hgetall('key')  #获取key 对应的所有值
    5、hlen('key')  #获取key对应的hash中键值对的个数
    6、hkeys(name) # name 对应的所有key的值
    7、hvals(name) # 所有value值
    8、hdel(name,*keys) 指定hash的中key,删除键值对
    8、hincrby(name, key, amount=1)
    #key 存在自增,不存在创建key:amount
    注:hincrbyfloat 自增浮点数
    9、hscan(name, cursor=0, match=None, count=None)
    注:用于取大数据,迭代取值
    参数:
        # name,redis的name
        # cursor,游标(基于游标分批取获取数据)
        # match,匹配指定key,默认None 表示所有的key
        # count,每次分片最少获取个数,默认None表示采用Redis的默认分片个数
    例:
    print(conn.hscan('k2',cursor=2,count=3))
    print(conn.hscan_iter('k2'))
    for item in conn.hscan_iter('k2'):
        print(item)
    • List
    1、添加 lpush(name,values)
    # print(r.lpush('kk','ff',44,99))
    2、lpushx(name,value) 
    # name 存在 从左边开始添加
    3、llen(name) # 对应 list的个数
    4、linsert(name, where, refvalue, value)) # 在某一个值的前或者后插入值
    参数:
         # name,redis的name
        # where,BEFORE或AFTER(小写也可以)
        # refvalue,标杆值,即:在它前后插入数据(如果存在多个标杆值,以找到的第一个为准)
        # value,要插入的数据
    5、lset(name, index, value) # 指定索引修改值
    6、lrem(name, value, num) #在name对应的list中删除指定的值
    参数:
        # name,redis的name
        # value,要删除的值
        # num,  num=0,删除列表中所有的指定值;
        num=2,从前到后,删除2个;
        num=-2,从后向前,删除2个
    7、lpop(name) # #删除name对应的列表中左侧第一个元素
    注: rpop  删除右侧第一个
    8、lindex(name, index) # 根据索引取值
    9、rpoplpush(src, dst) #将数据从一个列表添加到另一个列表
    10、lrange(name, start, end) #分片获取数据
    11、列表数据较大需要自定义增量迭代
    def ll_sacn(name,count=2):
        index=0
        while True:
            data_list=conn.lrange(name,index,index+count-1)
            if not data_list:
                return
            index=index+count
            for item in data_list:
                yield item
    
    for i in ll_sacn('ll'):
        print(i)
    • Set 无序集合
    • Sorted Set 有序集合 (排行榜应用)
    • 其他操作
    1、delete(*names) #删除任意数据类型
    2、exists(name) #判断name是否存在
    3、keys(pattern='*') # 根据模型匹配key值
    4、expire(name ,time) #设置超时时间
    5、rename(src, dst) # 重命名
    6、scan(cursor=0, match=None, count=None)
    scan_iter(match=None, count=None)
    # 增量迭代获取key
    7、move(name, db)) # name移动的指定的db下

    4. 使用redis

    4.1 在pychram 中使用

    import redis
    #添加数据
    r=redis.Redis (host='127.0.0.1',port=6379)
    r.set('foo','Bar')
    print(r.get('foo'))
    
    #连接池
    pool =redis .ConnectionPool (host='127.0.0.1',port=6379)
    r=redis.Redis (connection_pool= pool)
    r.set('name',77)
    print(r.get('name'))

    4.2 在Django中使用

    • 方式一:
    1、utils文件夹下,建立redis_pool.py
    import redis
    POOL = redis.ConnectionPool(host='127.0.0.1', port=6379,password='1234',max_connections=1000)
    2、视图函数中
    import redis
    from django.shortcuts import render,HttpResponse
    from utils.redis_pool import POOL
    
    def index(request):
        conn = redis.Redis(connection_pool=POOL)
        conn.hset('kkk','age',18)
        return HttpResponse('设置成功')
    • 方式二:
    1、安装django-redis模块
    2、在setting中配置
    CACHES = {
        "default": {
            "BACKEND": "django_redis.cache.RedisCache",
            "LOCATION": "redis://127.0.0.1:6379",
            "OPTIONS": {
                "CLIENT_CLASS": "django_redis.client.DefaultClient",
                "CONNECTION_POOL_KWARGS": {"max_connections": 100}
                # "PASSWORD": "123",
            }
        }
    }
    3、视图函数中
    from django_redis import get_redis_connection
    conn = get_redis_connection('default')
    print(conn.hgetall('xxx'))
  • 相关阅读:
    c++中的.hpp文件
    最近用vs使用的比较好的工具
    new内存分配失败
    "0x%08x" C语言
    python爬取智联招聘工作岗位信息
    GIS应用1000例01序
    lxml 中连续调用xpath出的问题
    arcgis JavaScript API总体结构
    PostgreSQL安装
    ES6转ES5的babel的使用
  • 原文地址:https://www.cnblogs.com/quqinchao/p/9898385.html
Copyright © 2011-2022 走看看