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( ...
随机推荐
- beego orm的使用
在使用beego model 去操作数据库时 有一些疑惑 找到了一个比较好的博文 原文地址 : https://my.oschina.net/u/252343/blog/829912 (Kelvin ...
- MySQL 8 复制
MySQL 8.0 支持的复制方法: 传统方法(基于二进制日志文件位置) 新方法(基于GTID) MySQL 8.0 支持的同步类型: 异步复制(内置) 同步复制(NDB集群) 半同步复制(半同步复制 ...
- 【58】目标检测之YOLO 算法
YOLO 算法(Putting it together: YOLO algorithm) 你们已经学到对象检测算法的大部分组件了,在这个笔记里,我们会把所有组件组装在一起构成YOLO对象检测算法. ...
- Spring mvc拦截器防御CSRF攻击
CSRF(具体参考百度百科) CSRF(Cross-site request forgery跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSR ...
- jquery.datetimepicker中报错Cannot read property 'top' of undefined
今天在项目里用到一个jQuery的时间插件,一开始自己写的测试demo完全么的问题 但当我把它放到项目里时问题来了,报了一个错:Cannot read property 'top' of undefi ...
- 数据库设计工具-powerdesigner
一.PowerDesigner导出SQL,注释为空时以name代替 操作步骤 1. 2. 3.将Value中的内容全部替换为如下 %:COLUMN% [%National%?national ]%DA ...
- 轻量级RPC设计与实现第二版
在上一个版本中利用netty实现了简单的一对一的RPC,需要手动设置服务地址,限制性较大. 在本文中,利用zookeeper作为服务注册中心,在服务端启动时将本地的服务信息注册到zookeeper中, ...
- nginx模块之ngx_http_fastcgi_module
nginx支持LNMP 安装php-fpm yum install php-fpm -y 使用/etc/php-fpm.d/www.conf配置文件默认配置即可 打开php配置: vim /etc/n ...
- Spark学习之路 (七)Spark 运行流程[转]
Spark中的基本概念 (1)Application:表示你的应用程序 (2)Driver:表示main()函数,创建SparkContext.由SparkContext负责与ClusterManag ...
- 纪中集训2020.02.03【NOIP提高组】模拟B 组总结反思——登机(board),游戏(game),分组(group)
T1 JZOJ5535. 登机(board) 比赛时 一在题目列表里看到题目标题,就热血沸腾了,不知道为什么,老师居然放了一道之前做过的题目.我清楚地记得这题是DP,于是很快码了出来.讲一讲我的思路, ...