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( ...
随机推荐
- day18 正则表达式初学
正则规则:客观存在的,世界上任何一种语言都能使用它. 在线测试网址:http://tool.chinaz.com/regex 正则语句:只和字符串相关,需要考虑的是:在同一个位置上可以出现的字符范围 ...
- 异步处理MultipartFile No such file or directory的分析
背景 项目中开发导入功能,因为数据量比较大,所以要求后端异步操作(个人觉得前端ajax处理最好,有空再试一下).但是操作中发现改为异步之后,相同代码的情况下会报(No such file or dir ...
- C#通过文件路径获取文件名
string fullPath = @"\WebSite1\Default.aspx"; string filename = System.IO.Path.GetFileName( ...
- CSS3结构类选择器补充
:empty 没有子元素(包括文本节点)的元素 :not 否定选择器 <!DOCTYPE html> <html lang="en" manifest=&quo ...
- Antenna Placement poj 3020
Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12104 Accepted: 595 ...
- IntelliJ IDEA 2019.3注册码(亲测有效,可激活至 2089 年,持续更新~)
申明:本教程 IntelliJ IDEA 破解补丁.激活码均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除. 注意 本教程适用于 IntelliJ IDEA 所有版本,请放心食用~ ...
- tensorflow高阶操作
本篇内容有:如何根据坐标有目的的选择(where).如何根据坐标有目的的更新(scatter_nd).如何生成一个坐标系() 1.where where针对的tensor是一个bool类型的tenso ...
- 记一次mysql的问题处理@20181225
需求:由于某种原因,导致一次分库分表的环境中ddl添加字段和索引没有完全成功,比如100个分库,只有部分修改成功,需要将没有修改成功的库和表找出来,在手动去执行. 由于线上环境,这里模拟还原一下该问题 ...
- 敌兵布阵 HDU - 1166 板子题
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> ...
- ubuntu16.04更换成国内源
一.首先使用自带的vi编辑器 安装完ubuntu后没有默认的root密码,如果要设置root密码需要进行如下步骤: 1 sudo passwd 2 连续输入两次新密码 二.vi编辑器下使用[backs ...