zoukankan      html  css  js  c++  java
  • redis

    redis安装

    1、官网下载:安装包或是绿色面安装
    2、安装并配置环境变量

    redis VS mysql

    redis: 内存数据库(读写快)、非关系型(操作数据方便、数据固定)
    mysql: 硬盘数据库(数据持久化)、关系型(操作数据间关系、可以不同组合)

    大量访问的临时数据,才有redis数据库更优

    redis VS memcache

    redis: 操作字符串、列表、字典、无序集合、有序集合 | 支持数据持久化(数据丢失可以找回(默认持久化,主动持久化save)、可以将数据同步给mysql) | 高并发支持
    memcache: 操作字符串 | 不支持数据持久化 | 并发量小

    Redis操作

    启动服务

    前提:前往一个方便管理redis持久化文件的逻辑再启动服务:dump.rdb
    1)前台启动服务
    >: redis-server
    2)后台启动服务
    >: redis-server --service-start
    3)配置文件启动服务
    >: redis-server 配置文件的绝对路径
    >: redis-server --service-start 配置文件的绝对路径
    eg>: redis-server --service-start D:/redis/redis.conf

    密码管理

    1)提倡在配置文件中配置,采用配置文件启动
    requirepass 密码

    2)当服务启动后,并且连入数据库,可以再改当前服务的密码(服务重启,密码重置)
    config set requirepass 新密码

    3)连入数据库,查看当前服务密码密码
    config get requirepass

     连接数据库

    1)默认连接:-h默认127.0.0.1,-p默认6379,-n默认0,-a默认无
    >: redis-cli

    2)完整连接:
    >: redis-cli -h ip地址 -p 端口号 -n 数据库编号 -a 密码

    3)先连接,后输入密码
    >: redis-cli -h ip地址 -p 端口号 -n 数据库编号
    >: auth 密码

    关闭服务

    1)在没有连接进数据库时执行
    >: redis-cli shutdown

    2)连接进数据库后执行
    >: shutdown

    切换数据库

    1)在连入数据库后执行
    >: select 数据库编号

    数据持久化

    1)配置文件默认配置
    save 900 1 # 超过900秒有1个键值对操作,会自动调用save完成数据持久化
    save 300 10 # 超过300秒有10个键值对操作,会自动调用save完成数据持久化
    save 60 10000 # 超过60秒有10000个键值对操作,会自动调用save完成数据持久化

    2)安全机制
    # 当redis服务不可控宕机,会默认调用一下save完成数据持久化

    3)主动持久化
    >: save # 连入数据库时,主动调用save完成数据持久化

    注:数据持久化默认保存文件 dump.rdb,保存路径默认为启动redis服务的当前路径

     Redis数据类型

    https://www.runoob.com/redis/redis-tutorial.html

    数据操作:字符串、列表、哈希(字典)、无序集合、有序(排序)集合
    有序集合:游戏排行榜

    字符串
    set key value
    get key
    mset k1 v1 k2 v2 ...
    mget k1 k2 ...
    setex key exp value
    incrby key increment

     

     

     

     

     

    列表
    rpush key value1 value2 ...
    lpush key value1 value2 ...
    lrange key bindex eindex
    lindex key index
    lpop key | rpop key
    linsert key before|after old_value new_value

    哈希
    hset key field value
    hget key field
    hmset key field1 value1 field2 value2 ...
    hmget key field1 field2
    hkeys key
    hvals key
    hdel key field

    集合
    sadd key member1 member2 ...
    sdiff key1 key2 ...
    sdiffstore newkey key1 key2 ...
    sinter key1 key2 ...
    sunion key1 key2 ...
    smembers key
    spop key

    有序集合
    zadd key grade1 member1 grade2 member2 ...
    zincrby key grade member
    zrange key start end
    zrevrange key start end

     python使用redis

    依赖

     pip install redis

    直接使用
    import redis
    r = redis.Redis(host='127.0.0.1', port=6379, db=1, password=None, decode_responses=True)
    连接池使用
    import redis
    pool = redis.ConnectionPool(host='127.0.0.1', port=6379, db=1, max_connections=100, password=None, decode_responses=True)
    r = redis.Redis(connection_pool=pool)

    缓存使用:要额外安装 django-redis

    # 1.将缓存存储位置配置到redis中:settings.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": "",
            }
        }
    }
    
    # 2.操作cache模块直接操作缓存:views.py
    from django.core.cache import cache  # 结合配置文件实现插拔式
    # 存放token,可以直接设置过期时间
    cache.set('token', 'header.payload.signature', 300)
    # 取出token
    token = cache.get('token')

     接口缓存

    后台接口是提供数据库数据的,IO操作慢,可以将数据存储在缓存中,接口数据从缓存中调
    一般将大量访问(数据时效性要求不是很苛刻)的接口建立缓存
    接口缓存思想:数据先走缓存,有直接返回,没有走数据库(同步到缓存)

    from rest_framework.viewsets import GenericViewSet
    from rest_framework import mixins
    from django.conf import settings
    from utils.response import APIResponse
    from . import models, serializers
    from rest_framework.response import Response
    from django.core.cache import cache
    class BannerListViewSet(mixins.ListModelMixin, GenericViewSet):
        queryset = models.Banner.objects.filter(is_delete=False, is_show=True).order_by('-orders').all()[:settings.BANNER_COUNT]
        serializer_class = serializers.BannerModelSerializer
    
        # 自定义响应结果的格式
        # def list(self, request, *args, **kwargs):
        #     response = super().list(request, *args, **kwargs)
        #     return APIResponse(results=response.data)
    
        # 接口缓存
        def list(self, request, *args, **kwargs):
            data = cache.get('banner_cache')
    
            if not data:
                print('走了数据库')
                response = super().list(request, *args, **kwargs)
                cache.set('banner_cache', response.data)  # 不设置过期时间,缓存的更新在后台异步更新(celery异步框架)
                return response
    
            return Response(data)
  • 相关阅读:
    Eclipse中jsp、js文件编辑时,卡死现象解决汇总
    环境安装备忘录 Nginx
    环境安装备忘录 Redis redis-slave-端口号.conf
    环境安装备忘录 Redis redis-common.conf
    环境安装备忘录 Redis
    Leetcode 131 Palindrome Partitioning(DFS思路)
    排序算法之快速排序(Quick Sort) -- 适用于Leetcode 75 Sort Colors
    谈STL的重要应用与实现
    二分图匹配相关问题
    理解操作系统相关知识
  • 原文地址:https://www.cnblogs.com/fjn839199790/p/12172648.html
Copyright © 2011-2022 走看看