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缓存数据库的更多相关文章

  1. 快速搭建Redis缓存数据库

    之前一篇随笔——Redis安装及主从配置已经详细的介绍过Redis的安装于配置.本文要讲的是如何在已经安装过Redis的机器上快速的创建出一个新的Redis缓存数据库. 一.环境介绍 1) Linux ...

  2. [技术博客] 用户验证码验证机制---redis缓存数据库的使用

    目录 问题引入 初识redis 实际应用 作者:马振亚 问题引入 在这次的开发过程中,我们的需求中有一个是普通用户可以通过特定的机制申请成为社长.因为只有部分人才能验证成功,所以这个最开始想了两种思路 ...

  3. Django缓存机制以及使用redis缓存数据库

    目录 Django 配置缓存机制 缓存系统工作原理 Django settings 中 默认cache 缓存配置 利用文件系统来缓存 使用Memcache来缓存: 使用Local-memory来缓存: ...

  4. redis缓存数据库及Python操作redis

    缓存数据库介绍  NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库,随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站, 特 ...

  5. NOSQL中的redis缓存数据库

    NOSQL概述 什么是NOSQL? NoSql(NoSQL=Not Only SQL),意思为"不仅仅是SQL",是一个全新的数据库理念,泛指非关系型的数据库. 为什么需要NOSQ ...

  6. 关于redis缓存数据库的一些思考

    今晚无聊,躺在床上,在刷技术文章时,看见了一篇关于redis缓存的文章 写的蛮好,这也就引起了我对于redis思考! 不如往深了说 引起了我对于追求探索技术本质的一些思考 平时在网上刷到很多关于red ...

  7. 性能超前,详解腾讯云新一代Redis缓存数据库

    背景 当前内存数据库发展迅速,用户对于存储系统的要求也越来越高,为了满足各类业务场景的需要,腾讯云设计了新一代的内存数据库,不但保留了原来系统的高性能,高可用等特性,同时还兼容了当前流行的Redis原 ...

  8. NoSQL:redis缓存数据库

    一 Redis介绍 Redis和Memcached类似,也属于key-value nosql 数据库 Redis官网redis.io, 当前最新稳定版4.0.1 和Memcached类似,它支持存储的 ...

  9. redis缓存数据库

    redis 介绍 redis是业界主流的key-value nosql 数据库之一.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set( ...

随机推荐

  1. python部署到服务器

    python部署到服务器 linux下的CentOS 7 自带python2.7.5, 使用 python --version 命令查看,因系统需要python2.7.5,因此我们并不卸载,另外安装p ...

  2. 码云配合git入门命令总结学习

    目录 码云配合git入门命令总结学习 基本设置 基本命令总结学习 准备工作以及基本思路 基本命令 码云搭建仓库步骤 准备前工作 具体操作方法 远程仓库基本命令 标签相关命令 所有命令总结 基本命令总结 ...

  3. Java Web 笔记(1)

    JavaWeb 学习笔记,狂神说java,链接:https://www.bilibili.com/video/av68833391 Java Web 1.基本概念 1.1.前言 web开发: web, ...

  4. jQuery---jquery.color.js和jquery.lazyload.js的使用

    jquery.color.js的使用 了解即可 <!--1. 引入jquery的js文件--> <script src="jquery-1.12.4.js"> ...

  5. 视频会议系统MCU服务器视频传输处理模式

    视频会议系统MCU服务器视频传输处理模式 视频会议系统的组成主要包括终端.MCU服务器.网守等,其中的MCU服务器是整个系统的核心,视频会议系统的性能很大程度取决于MCU服务器的性能,因此MCU服务器 ...

  6. 一些实用的GitHub项目

    原文链接:http://www.louisvv.com/archives/2036.html 最近整理了一些在GitHub上比较热门的开源项目 关于GitHub,快速了解请戳这里 其中涵盖了:学习教程 ...

  7. 【笔记】机器学习 - 李宏毅 - 13 - Why Deep

    当参数一样多的时候,神经网络变得更高比变宽更有效果.为什么会这样呢? 其实和软件行业的模块化思想是一致的. 比如,如果直接对这四种分类进行训练,长发的男孩数据较少,那么这一类训练得到的classifi ...

  8. 卸载Windows控制面板的程序和功能中找不到的一些软件的方法

    卸载Windows控制面板的程序和功能中找不到的一些软件的方法 找到卸载程序进行卸载即可

  9. webpack4搭建vue多页面环境

    总结一下webpack4配置vue开发环境,本文不具体介绍webpack的基本概念和用途,如有不了解的请参见https://www.webpackjs.com/concepts/官网 一.webpac ...

  10. 嵊州D5T1 鸡翅 chicken

    鸡翅  chicken [问题描述] 小 x 非常喜欢小鸡翅. 他得知 NSC 超市为了吸引顾客,举行了如下的活动: 一旦有顾客在其他超市找到更便宜的小鸡翅, NSC 超市将免费送给顾客 1000g ...