• redis


    redis与memcache

    前端数据库: cookie, sessionStorage, localStorage

    1. redis支持的数据结构有: 字符串、列表、字典、无序集合、有序集合, 而memcache只支持字符串
    2. redis支持内存数据持久化和高并发, 而memcache不支持内存数据持久化且并发量小

    redis基本操作

    '''
    1. 通过配置文件后台启动redis服务: redis-server --service-start /d/Redis/my_redis.conf
    
    2. 连接redis服务: redis-cli -h localhost -p 6379 -n 数据库索引 -a 密码
    
    3. 关闭redis服务: redis-cli shutdown
    
    4. 切换数据库: select 数据库索引
    
    5. 设置密码: config set requirepass 密码  # 重启redis服务后密码重置为 D:Redismy_redis.conf 中配置的密码
    '''
    

    redis数据持久化

    1. 数据丢失找回: 服务器关闭时默认会调用save将内存中的数据持久化保存到 dump.rdb 中, dump.rdb的位置可以在 D:Redismy_redis.conf 中进行修改

    2. 满足指定条件时周期性调用save将内存中的数据持久化保存到 dump.rdb 中, 可以在 D:Redismy_redis.conf 中修改条件和周期

    3. 主动调用save将内存中的数据持久化保存到 dump.rdb 中

    redis的数据结构

    String, Hash, List, Set, Sorted Set

    redis的字符串操作

    '''
    mset a 1 b 2 c 3
    mget a b c
    
    setex age 3 18  # 设置age: 18的过期时间为3s
    
    incrby age 10  # 将age的值增加10
    
    append name xxx  # 将xxx拼接到name值后面
    '''
    

    redis的列表操作

    '''
    rpush student Bob Tom  # 创建students列表并添加列表值Bob, Tom
    
    lrange students 0 -1  # 获取students列表中的所有值
    
    llen students  # 获取students列表中元素的个数
    
    ltrim students 1 3  # 将students列表中索引为[1-3]之外的其他元素剪切
    '''
    

    redis的字典操作

    '''
    hmset people name cql age 25  # 创建people字典并添加键值对
    hmset people gender male
    hmset people age 26
    
    hkeys people  # 获取所有key
    hvals people  # 获取所有的value
    
    hdel people gender
    '''
    

    redis的集合操作

    '''
    scard set1: 统计集合set1中的元素个数, 应用: 微博求粉丝数
    
    sinter set1 set2: 求set1与set2的交集, 应用: 微博共同关注的人
    
    sdiff set1 set2: 求s1与s2的差集, 即s1-s2, 应用: cmdb项目比较新老数据
    '''
    

    使用有序集合做排行榜

    '''
    zadd game_rank 666 nick 888 tank 777 jason  # 创建game_rank有序集合并添加数据
    
    zcount game_rank 666 777  # 计算game_rank有序集合中分数在[666-777]之间的元素的个数
    
    zincrby game_rank 333 nick  # 将game_rank有序集合中nick成员的分数增加333
    
    zrange game_rank 0 1  # 获取game_rank有序集合中索引为[0-1]的成员
    zrevrange game_rank 0 1  # 将game_rank有序集合中的成员按分数降序排列后, 获取索引为[0-1]的成员
    
    应用: 微博热搜, 游戏排行榜
    '''
    

    python操作redis数据库

    '''
    import redis
    
    pool = redis.ConnectionPool(host='127.0.0.1', port=6379, db=1, password=None, decode_responses=True, max_connections=10)  # 创建连接池
    r = redis.Redis(connection_pool=pool)  # 通过连接池, 使用"r."的方式操作redis数据库, 使用连接池可以免除线程与redis服务建立链接的时间
    '''
    

    通过配置将django缓存数据存到redis中

    django_redis既能使django缓存做数据持久化, 又能使redis存储自定义对象

    '''
    # ...luffyapidev_manage.py
    CACHES = {
        "default": {
            "BACKEND": "django_redis.cache.RedisCache",
            "LOCATION": "redis://127.0.0.1:6379/0",
            "OPTIONS": {
                "CLIENT_CLASS": "django_redis.client.DefaultClient",
                "CONNECTION_POOL_KWARGS": {"max_connections": 100},
                "DECODE_RESPONSES": True,
                "PSAAWORD": "",
            }
        }
    }
    
    
    # ...luffyapiscripts	est.py
    import os
    import django
    from django.core.cache import cache
    from luffyapi.apps.user import models
    
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "luffyapi.settings.dev_settings")
    django.setup()
    
    user_queryset = models.User.objects.all()
    cache.set('user_queryset', user_queryset, 300)
    print(cache.get('user_queryset'))
    '''
    

    接口缓存

    将大量访问但不需要实时更新数据的接口建立缓存

    '''
    # ...luffyapiluffyapiappshomeviews.py
    ...
    from rest_framework.generics import ListAPIView
    from django.core.cache import cache
    
    
    class BannerListAPIView(ListAPIView):
        queryset = models.Banner.objects.filter(id_delete=False, is_show=True).order_by('-orders')[: settings.BANNER_AMOUNT]  # 惰性查询
        serializer_class = my_serializers.BannerModelSerializer
    
        # 重写list方法建立轮播图接口缓存
        def list(self, request, *args, **kwargs):
            banner_cache = cache.get('banner_cache')
    
            if not banner_cache:
                response = super().list(request, *args, **kwargs)
                cache.set('banner_cache', response.data)
                return response
    
            return Response(data=banner_cache)
    '''
    
  • 相关阅读:
    leetcode刷题16
    leetcode刷题15
    leetcode刷题14
    leetcode刷题13
    UnityWebReqest和WWW,请求web数据打包到Android手机上,报错 Unknown error记录
    Unable to instantiate prefab. Prefab may be broken.(Unity2018.2.2报错)
    Unity 2018.4.0 回退到 2018.2.2 出现错误日志修复
    Windows系统中,使用Protobuf,编译出C#文件
    Unity长按Button,显示消息盒子
    Mac 端 查找UnityEngine.dll和UnityEngine.UI.dll
  • 原文地址:https://www.cnblogs.com/-406454833/p/12709313.html
Copyright © 2020-2023  润新知