redis基础

一.基础信息

1.安装
参考官网:https://redis.io/download

2.介绍
参考:https://zhuanlan.zhihu.com/p/81195864
Redis是一种运行在内存中,速度极快的NoSql数据库,支持键到五种数据类型的映射。

3.特点
redis是单线程操作(因为Redis的瓶颈不是cpu的运行速度,而往往是网络带宽和机器的内存大小,使用单线程即可满足并发需求),避免了频繁的上下文切换
采用了多路复用io阻塞机制
数据结构简单,操作节省时间
运行在内存中,速度极快

4.redis值的5种数据类型
参考:https://www.cnblogs.com/logicalsky/p/5946647.html
String 整数,浮点数或者字符串
Hash 散列表,python种的字典
Set 集合
Zset 有序集合
List 列表

5.持久化
参考:https://zhuanlan.zhihu.com/p/55596825
https://zhuanlan.zhihu.com/p/68402040
由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。

redis提供两种持久化方式:

  1. RDB持久化
    在指定时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。
    redis宕机后,会有部分数据丢失(间隔时间保存),适用绝大部分场景
  2. AOF持久化
    append only file:以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式追加记录,可以打开文件看到详细的操作记录。

6.redis 的雪崩、穿透和击穿
参考:https://zhuanlan.zhihu.com/p/74880843

二.其他

2.管道pipeline
与redis数据库的连接类似TCP连接,为优化数据库性能,可以将多个没有依赖关系的读写一起操作,类似mysql的事务

import redis

# 连接redis,第三个参数默认为False,表示读写数据为bytes类型,True则为字符串类型
r = redis.Redis(host='localhost',port=6379,decode_responses=True)

r.set('apple','123')

# 开启管道
pipe = r.pipeline(transaction=True)
pipe.set('banana','456')
pipe.set('orange','789')
pipe.set('apple','111')
print(r.get('apple'))  #123,数值未改变
print(r.get('banaban'))  #None
pipe.execute()

print(r.get('apple'))  #111

3.连接池pool:节省资源,共用连接池中的连接,减少多次连接的损耗

import redis
# 创建连接池
pool = redis.ConnectionPool(host='localhost',port=6379,decode_responses=True)
# 从连接池中获取连接
r1 = redis.Redis(connection_pool=pool)
r2 = redis.Redis(connection_pool=pool)

r1.set('apple','123')
r2.set('banana','456')

print(r1.get('apple'))
print(r2.get('banana'))

print(r1.client_list())  #两个连接的id相同
print(r2.client_list())

4.django中设置页面缓存,规定时间内返回缓存中的页面,减少服务器压力
应用场景:短时间内出现大量重复的访问,如抢火车票,在线商城秒杀活动
1.安装模块:
sudo pip3 install django-redis
2.修改配置文件:

CACHES = {
    'default':{
        'BACKEND':'django_redis.cache.RedisCache',
        'LOCATION':'127.0.0.1:6379',
        "OPTIONS":{
            "CLIENT_CLASS":"django_redis.client.DefaultClient",
},
    }
}

REDIS_TIME = 7*24*60*60
CUBES_REDIS_TIMEOUT = 60*60
NEVER_REDIS_TIMEOUT = 365*24*60*60

3.实现页面缓存

from django.shortcuts import render
from datetime import datetime
from django.views.decorators.cache import cache_page

# 设置缓存时间10s,10秒内访问此视图则从缓存中读取页面,返回响应码200
@cache_page(10)
def redis_(request):
    real_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    return render(request, 'redis_test.html', {'real_time':real_time})

5.向redis中存取数据

from django.shortcuts import render,HttpResponse
from django.core.cache import cache
from django.conf import settings
# Create your views here.

def redis_data(request):
    return render(request, 'redis_data.html')

def write_to_redis(request):
    key = request.GET.get('key')
    value = request.GET.get('value')
    #存数据:键、值、保存时间
    cache.set(key,value,settings.NEVER_REDIS_TIMEOUT)
    return render(request,'redis_data.html')

def read_from_redis(request):
    key = request.GET.get('key')
    #key不存在则返回None
    value = cache.get(key)
    return HttpResponse(value)

6.连接远程redis数据库
参考:
https://www.cnblogs.com/wangwust/p/9765674.html
https://www.cnblogs.com/chinaifae/articles/10329475.html

  • 开启远程访问权限,注释掉redis配置文件中的:bind 127.0.0.1
    sudo vi /etc/redis/redis.conf
    #注释bind
    #bind 127.0.0.1
  • 远程连接redis会有个自我保护机制,拒绝访问
    临时关闭:启动命令改为:redis-server --protected-mode no
         或redis本地客户端中输入命令:CONFIG SET protected-mode no
    永久关闭:修改配置文件
  • 关闭redis服务
    redis-cli (-h 127.0.0.1 -p 6379) shutdown
  • 重启redis服务
    sudo service redis-server restart
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值