06 部署redis缓存数据库
1 安装redis
$ sudo apt-get install redis-server
安装完成后,Redis服务器会自动启动,检查Redis服务器程序
注:在安装过程中,腾讯服务器会中途停止。
解决办法如下:
A 关闭redis配置文件中的ipv6监听
$ sudo vi /etc/redis/redis.conf
改为本机Ip,并去掉后面的::1
B 关闭主机的ipv6监听
$ sudo vi /etc/sysctl.d/99-sysctl.conf
重启!
再重新安装【以root身份安装】
$ sudo apt-get install redis-server
查看redis状态
$ ps -aux|grep redis
运行结果如下:
查看redis运行状态
$ sudo /etc/init.d/redis-server status
2 redis服务启动和停止
# 启动redis服务 $ sudo service redis start # 停止redis服务 $ sudo service redis stop # 重启redis服务 $ sudo service redis restart
3 redis配置
$ sudo vi /etc/redis/redis.conf
3.1 IP绑定
找到bind 127.0.0.1,默认绑定IP,更改为本机实际IP,就是用ifconfig显示的IP。这样,通过外网同样能够访问。如:
百度服务器自身的IP是:192.168.0.5
外网访问的IP是:180.76.238.63
此时需要设置为:bind 192.168.0.5,这样,外网通过180.76.238.63同样可以访问。切记:不能直接绑定外网IP。
3.2 port绑定
找以port,默认是6379,改为5379
特别注意的是:腾讯云服务器禁用了6379端口,改成5379即可。
3.3 配置数据库数量,默认是16
databases 256
3.4 设置密码
requirepass 123456789
3.5 修改后重启生效
$ sudo /etc/init.d/redis-server restart
3.6 没有密码不能访问
$ redis-cli -h 172.17.0.11 -p 5379
3.7 输入密码才能访问
$ redis-cli -h 172.17.0.11 -p 5379 -a 123456789
4 主从服务器配置
4.1 修改从服务器配置
进入redis安装目录,把redis.conf文件拷贝到slave.conf(文件名可以任取),并修改slave.conf参数
$ cd /etc/redis/ $ sudo cp redis.conf slave.conf $ vi slave.conf
4.1.1 搜索port,设置从服务器的端口号port 5380
4.1.2 搜索slaveof,设置主服务器的IP和端口号:slaveof 192.168.0.5 6379,并修改
4.1.3 禁止自身的密码,共享主服务器的密码,前面加#号禁止
4.1.4 在从服务器中设置主服务器的密码,不然不能从主服务器中拿到数据。
4.2 启动从服务器
$ sudo redis-server /etc/redis/slave.conf
4.3 查看redis服务器
$ ps -aux | grep redis
4.4 查看主从关系
$ redis-cli -h 172.17.0.11 -a cgl139 -p 5379 info Replication
$ redis-cli -h 172.17.0.11 -a cgl139 -p 5380 info Replication
4.5 检查主从服务器数据是否同步
打开两个Xshell,一个运行5379
$ redis-cli -a cgl139 -h 172.17.0.11 -p 5379
一个运行5380
$ redis-cli -a cgl139 -h 172.17.0.11 -p 5380
在5379上执行:
set name chengl get name
在5380上执行:
可以看到5379上设置的数据,在5380上能够获取。5380是5379的一个备份。5380上只读的。
4.6 如果要在redis中显示中文,需要加上:--raw
$ redis-cli -h 172.17.0.11 -a cgl139 -p 5379 --raw
5 与python交互
在APP下的test.py中编写测试代码
from redis import * try: sr = StrictRedis(host='49.235.75.157', port=5379, db=1,password='cgl139') sr.set('chengl', '99') res = sr.keys() print(res) except Exception as e: print(e)
运行test.py,如果正常显示返回值,表示连通了。可以到redis的1号数据库查看。
6 与Django交互
6.1 在django配置文件settings.py中增加redi缓存配置
# Redis 数据库 REDIS_SERVER = '49.235.156.156' CACHES = { # 缓存view数据 "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://" + REDIS_SERVER + ":6379/0", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "PASSWORD": "1q2w3e", } }, # 缓存登录session "session": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://" + REDIS_SERVER + ":6379/1", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "PASSWORD": "1q2w3e", } }, # 存放sms验证码 "sms_codes": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://" + REDIS_SERVER + ":5379/2", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "PASSWORD": "cgl139", } } } # 修改了Django的Session机制使用redis保存,且使用名为'session'的redis配置。 # 此处修改Django的Session机制存储主要是为了给Admin站点使用。 SESSION_ENGINE = "django.contrib.sessions.backends.cache" SESSION_CACHE_ALIAS = "session"
6.2 创建模型
在APP目录下models.py中,创建一个模型
from django.db import models # Create your models here. class UserInfo(models.Model): username = models.CharField(max_length=30, verbose_name='姓名') img = models.ImageField(upload_to='', verbose_name='照片') def __str__(self): return self.username class Meta: db_table = 'UserInfo'
6.3 创建模板
在APP下的Templates目录下创建一个index.html模板文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> {% load staticfiles %} </head> <body> {% for foo in obj %} <img src="{{ foo.img.url }}" alt="" style="width: 300px;height: 200px;"> {% endfor %} <br> <input type="button" id="login" value="登录" style="padding: 5px 10px;margin: 10px"> <input type="button" id='refresh' value="刷新" style="padding: 5px 10px;margin: 10px"> <script src="{% static "jquery-2.2.4.js" %}"></script> <script src="{% static "index.js" %}"></script> </body> </html>
6.4 编写视图
在APP下的views.py中,增加一个视图
class Index(View): @classmethod def get(cls, request): # fdfs测试用 obj = models.UserInfo.objects.all() return render(request, 'index.html', {'obj': obj}) @classmethod def post(cls, request): # redis测试用 state = request.POST.get('status') if state == '0': user = models.UserInfo.objects.get(id=2) request.session['user'] = user return HttpResponse('1') else: user = request.session.get('user') if user is None: return HttpResponse('0') return HttpResponse('1')
6.5 编写js代码
打开APP下Templates下的index.html文件,在</body>标签后增加以下代码:
$(function () { $('#login').on('click', function () { $.ajax({ url: '/index/', method: 'post', data: {'status': 0}, success: function (msg) { } }) }); $('#refresh').on('click', function () { $.ajax({ url: '/index/', method: 'post', data: {'status': 1}, success: function (msg) { if (msg === '0') { alert('请登录后使用') } } }) }) });
此时,运行浏览器,点击登录后立即点击刷新,刷新5秒后,即会提示登录。
7 报错处理
Redis "MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk"
解决办法,在ubuntu服务器上进入redis,输入:config set stop-writes-on-bgsave-error no
即:
192.168.0.5:6379[2]> config set stop-writes-on-bgsave-error no
这种情况的报错一般是没有配置主从服务器,配置了主从服务器就不会报这个错了。
err Invalid input of type: 'dict'. Convert to a byte, string or number first
网上搜索所有的办法都一个:就是当前redis的版本过高,要对redis进行降版安装redis2.10.6。
但实际操作没有用,还是会有这个提示,后来发现,是因为数据中包含中文字符,需要用json.dumps把对象中的中文字符转换。
06 部署redis缓存数据库的更多相关文章
- 快速搭建Redis缓存数据库
之前一篇随笔——Redis安装及主从配置已经详细的介绍过Redis的安装于配置.本文要讲的是如何在已经安装过Redis的机器上快速的创建出一个新的Redis缓存数据库. 一.环境介绍 1) Linux ...
- [技术博客] 用户验证码验证机制---redis缓存数据库的使用
目录 问题引入 初识redis 实际应用 作者:马振亚 问题引入 在这次的开发过程中,我们的需求中有一个是普通用户可以通过特定的机制申请成为社长.因为只有部分人才能验证成功,所以这个最开始想了两种思路 ...
- Django缓存机制以及使用redis缓存数据库
目录 Django 配置缓存机制 缓存系统工作原理 Django settings 中 默认cache 缓存配置 利用文件系统来缓存 使用Memcache来缓存: 使用Local-memory来缓存: ...
- redis缓存数据库及Python操作redis
缓存数据库介绍 NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库,随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站, 特 ...
- NOSQL中的redis缓存数据库
NOSQL概述 什么是NOSQL? NoSql(NoSQL=Not Only SQL),意思为"不仅仅是SQL",是一个全新的数据库理念,泛指非关系型的数据库. 为什么需要NOSQ ...
- 关于redis缓存数据库的一些思考
今晚无聊,躺在床上,在刷技术文章时,看见了一篇关于redis缓存的文章 写的蛮好,这也就引起了我对于redis思考! 不如往深了说 引起了我对于追求探索技术本质的一些思考 平时在网上刷到很多关于red ...
- 性能超前,详解腾讯云新一代Redis缓存数据库
背景 当前内存数据库发展迅速,用户对于存储系统的要求也越来越高,为了满足各类业务场景的需要,腾讯云设计了新一代的内存数据库,不但保留了原来系统的高性能,高可用等特性,同时还兼容了当前流行的Redis原 ...
- NoSQL:redis缓存数据库
一 Redis介绍 Redis和Memcached类似,也属于key-value nosql 数据库 Redis官网redis.io, 当前最新稳定版4.0.1 和Memcached类似,它支持存储的 ...
- redis缓存数据库
redis 介绍 redis是业界主流的key-value nosql 数据库之一.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set( ...
随机推荐
- python部署到服务器
python部署到服务器 linux下的CentOS 7 自带python2.7.5, 使用 python --version 命令查看,因系统需要python2.7.5,因此我们并不卸载,另外安装p ...
- 码云配合git入门命令总结学习
目录 码云配合git入门命令总结学习 基本设置 基本命令总结学习 准备工作以及基本思路 基本命令 码云搭建仓库步骤 准备前工作 具体操作方法 远程仓库基本命令 标签相关命令 所有命令总结 基本命令总结 ...
- Java Web 笔记(1)
JavaWeb 学习笔记,狂神说java,链接:https://www.bilibili.com/video/av68833391 Java Web 1.基本概念 1.1.前言 web开发: web, ...
- jQuery---jquery.color.js和jquery.lazyload.js的使用
jquery.color.js的使用 了解即可 <!--1. 引入jquery的js文件--> <script src="jquery-1.12.4.js"> ...
- 视频会议系统MCU服务器视频传输处理模式
视频会议系统MCU服务器视频传输处理模式 视频会议系统的组成主要包括终端.MCU服务器.网守等,其中的MCU服务器是整个系统的核心,视频会议系统的性能很大程度取决于MCU服务器的性能,因此MCU服务器 ...
- 一些实用的GitHub项目
原文链接:http://www.louisvv.com/archives/2036.html 最近整理了一些在GitHub上比较热门的开源项目 关于GitHub,快速了解请戳这里 其中涵盖了:学习教程 ...
- 【笔记】机器学习 - 李宏毅 - 13 - Why Deep
当参数一样多的时候,神经网络变得更高比变宽更有效果.为什么会这样呢? 其实和软件行业的模块化思想是一致的. 比如,如果直接对这四种分类进行训练,长发的男孩数据较少,那么这一类训练得到的classifi ...
- 卸载Windows控制面板的程序和功能中找不到的一些软件的方法
卸载Windows控制面板的程序和功能中找不到的一些软件的方法 找到卸载程序进行卸载即可
- webpack4搭建vue多页面环境
总结一下webpack4配置vue开发环境,本文不具体介绍webpack的基本概念和用途,如有不了解的请参见https://www.webpackjs.com/concepts/官网 一.webpac ...
- 嵊州D5T1 鸡翅 chicken
鸡翅 chicken [问题描述] 小 x 非常喜欢小鸡翅. 他得知 NSC 超市为了吸引顾客,举行了如下的活动: 一旦有顾客在其他超市找到更便宜的小鸡翅, NSC 超市将免费送给顾客 1000g ...