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( ...
随机推荐
- BZOJ #5457: 城市 [线段树合并]
线段树合并的板子题,每次从下到上合并就完事了 // by Isaunoya #include <bits/stdc++.h> using namespace std; #define re ...
- 四种常用的通知类型(xml)
1.maven依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...
- STL-map/multimap 简述
#include <iostream> #include <cstdio> #include <map> using namespace std; int main ...
- Pikachu-敏感信息泄露
敏感信息泄露概述 由于后台人员的疏忽或者不当的设计,导致不应该被前端用户看到的数据被轻易的访问到. 比如:---通过访问url下的目录,可以直接列出目录下的文件列表;---输入错误的url参数后报错信 ...
- rownum按某字段排序查询
特点:rownum伪列,查询结果按顺序从1递增排列 用途:按某字段排序查询第几名到第几名的数据 但加上按字段排序条件后,rownum并不会从1递增 需把按字段排序查询的数据作为一张表,再次查询,row ...
- Navicat 安装+连接
Navicat安装包: 链接:https://pan.baidu.com/s/1bvKagRJ0w_7LH0t4597ycA 提取码:yftv 如MySQL 8.0+ 安装成功后,教程见本博 可用Na ...
- mybatis插入嵌套对象
今晚做项目遇上了一个需求,需要插入嵌套对象. 对象结构是这样的: public class RegisterMsg{ private Header header; private short pro ...
- Codeforces Round #624 (Div. 3) F. Moving Points 题解
第一次写博客 ,请多指教! 翻了翻前面的题解发现都是用树状数组来做,这里更新一个 线段树+离散化的做法: 其实这道题是没有必要用线段树的,树状数组就能够解决.但是个人感觉把线段树用熟了会比树状数组更有 ...
- Python之五:函数
函数会给一段语句块命名,我们可以在任何时候调用它,运行其中的代码 它的一班语法: def fun_name(x): 函数语句体 return a def :说明这是一个函数,我们定义了一个函数: fu ...
- jQuery---三组基本动画 show hide
三组基本动画 show hide //show不传参数,没有动画效果 $("div").show(); //show(speed) //speed:动画的持续时间 可以是毫秒值 还 ...