Redis的使用 ,接口缓存

1|0一、Redis数据库介绍

1|11. Redis安装

""" 1、官网下载:安装包或是绿色免安装 (https://redis.io/),redis官网已经没有windows版本了,可以到GitHub上下载 2、配置环境变量(将解压文件的根目录的路径添加到系统环境变量,以便简化之后的操作) """

1|22. redis VS mysql

""" redis: 内存数据库(读写快)、非关系型(操作数据方便、数据固定) mysql: 硬盘数据库(数据持久化)、关系型(操作数据间关系、可以不同组合) 大量访问的临时数据,才有redis数据库更优 """

1|33. redis VS memcache

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

2|0二、Redis的基本使用

2|10. 设置配置文件

解压包中有两个配置文件,redis.windows.conf和redis.windows-service.conf,都是一样的内容,随便挑选用一个,打开文件。 1. 设置持久化 redis自带默认的持久化 2. 设置bind的IP 默认bing的为: bind 127.0.0.1 ,后面的ip根据自己的需求更改,客户端连接时,连的是bind的ip 3. 设置最大占用内存大小 配置文件中 找到 # maxmemory <bytes> ,去掉注释, maxmemory后面跟整数,单位是bytes,所以要注意换算成bytes的值 4. 设置密码 配置文件中找到 # requirepass foobared ,去掉注释,requirepass后面跟的就是密码,

2|21. 启动服务

# dump.rdb文件:(启动的redis服务时,redis解压文件根目录下就会生成该文件,所以启动redis服务前,可以先把redis文件放在合适的位置) redis缓存中的数据将会保存到该文件 """ 1)前台启动服务(就是在终端启动,这个终端关了,服务也关了) >: redis-server 2)后台启动服务 (就是在终端启动,这个终端关了,服务还在运行) 对于没有安装过redis的主机,要先安装服务才能使用后台启动服务方式来启动redis >: redis-server --service-install eg>: redis-server --service-install D:/redis/redis.windows.conf >: redis-server --service-start 3)通过配置文件启动服务 >: redis-server 配置文件的绝对路径 >: redis-server --service-start 配置文件的绝对路径 eg>: redis-server --service-start D:/redis/redis.windows.conf """

2|32. 密码管理

""" 1)提倡在配置文件中配置,采用配置文件启动后,就需要输入密码才有查看数据的权限 安装文件中的配置文件redis.windowsconf中:requirepass 密码 2)当服务启动后,并且连入数据库,可以再改当前服务的密码(该密码只对当前服务有效;服务重启,则密码重置,就是普通启动的话,密码会重置为空,通过配置文件启动的话,密码会重置为配置文件中的密码) config set requirepass 新密码 3)连入数据库,查看当前服务密码密码 config get requirepass """

2|43. Redis客户端连接服务端

  • Redis也是一个客户端一个服务端,启动服务端后,以客户端连接服务端,进行数据库操作。
""" 1)默认连接:-h默认127.0.0.1,-p默认6379,-n默认0,-a默认无 >: redis-cli 书写连接参数时,一定要与前面的-h,-p等这些符号空一格。而mysql则不用空格 其中:-h 表示服务端IP,连接本机时就是127.0.0.1,也可以写成localhost -p 表示端口号 -n 表示连接哪个数据库,默认从0到15个,共16个数据库 -a 表示密码 2)完整连接: >: redis-cli -h "ip地址" -p "端口号" -n "数据库编号" -a "密码" 3)先连接,后输入密码 >: redis-cli -h "ip地址" -p "端口号" -n "数据库编号" >: auth 密码 """

2|54. 关闭Redis服务

""" 1)当没有连接进服务端时,执行 >: redis-cli shutdown 2)当连接进服务端后,执行 >: shutdown """

2|65. 切换数据库

''' Redis默认从0到15个,共16个数据库 1)在连入数据库后,执行 >: select 数据库编号 (数据库编号就是0-15,当输入没有的数字类型的编号时,默认连接进0数据库,当输入不是数字的编号时,会报错) '''

2|76. 数据持久化

""" 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完成数据持久化,不用在save后面加括号 注:数据持久化默认保存文件 dump.rdb,保存路径默认为启动redis服务的当前路径 """

3|0三、Redis的数据类型和使用方法

  • 因为Redis是非关系型数据库,所以Redis的使用,都是直接操作各种键值对
""" 数据类型:字符串、列表、哈希(字典)、无序集合、有序(排序)集合 有序集合的应用:游戏排行榜 ******************在终端中的使用方法******************* 字符串: 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 """

4|0四、python中使用Redis

4|11. 安装redis模块

pip install redis

4|22. 在python中Redis的使用

  • 共有两种使用方式
1. 直接使用 import redis r = redis.Redis(host='127.0.0.1', port=6379, db=1, password=None, decode_responses=True) 2. 以连接池的方式使用,这样就有类似线程池一样的作用 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) 3. 使用方式:和终端中的使用方式基本一样 r.get(key) ...

4|33. Django项目中利用Redis作为缓存数据库

1|0(1)Django项目为什么要用Redis

  • Django中虽然自带管理缓存的cache模块,但是,cache管理的是Django项目的缓存,当Django项目程序关闭后,该缓存也会自动销毁,所以我们需要用Redis来当做Django的缓存数据库。让cache管理Redis数据库。这样就算是Django项目程序关闭,缓存中的数据依然存在。
  • Redis数据库只能存储字符串、数字和二进制类型的数据,对于其他的python中的对象,不能直接存储。需要利用Django自带的cache来处理,达到存储复杂对象的目的。

1|0(2)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')

4|44. 接口缓存

1|0(1)什么是接口缓存

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

1|0(2)接口缓存实例

# Django项目中网站主页的轮播图展示的后端业务逻辑 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)

__EOF__

本文作者BigSun丶
本文链接https://www.cnblogs.com/Mcoming/p/12173432.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   BigSun丶  阅读(1684)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示