memcache和redis

Nosql

一、NoSQL的基本说明

    NoSQL(NoSQL = Not Only SQL),意味反sql运动,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。它指的是非关系型的数据库。

二、兴起的原因

    随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模高并发的sns类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于本身的特点得到了非常迅速的发展。

三、特点

    优点:

        高并发读写的性能    大数据量的扩展(分布式存储)     配置简单

        灵活、高效的操作与数据模型     低廉的成本

    缺点:

        没有统一的标准     没有正式的官方支持     各种产品还不算成熟

四、常见的nosql产品

    新浪微博 Redis    Google Bigtable    Amazon SimpleDB    淘宝数据平台 Tair

    优酷视频 MongoDB    飞信空间 HandlerSocket    视觉中国网站 MongoDB

Memcache

一、基本概念

  1. Memcached是danga的一个项目,最早是LiveJournal 服务的,最初为了加速 LiveJournal 访问速度而开发的,后来被很多大型的网站采用。 官方网站: www.danga.com  和 memcached.org

  2. Memcached是一个高性能的分布式的内存对象缓存系统,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。(注: 摘自百度全科)

     Memcached是一个高性能的分布式的内存对象缓存系统

    分布式的概念:我们在实际的项目中可以使用多台memcache服务器,共同工作,存储的数据是分布式的。 

二、memcache的安装

    1、下载软件,并解压,拷贝到指定的位置,一般便于管理,和服务器的环境在同一个目录下

        8f41d058ab58d00e5d557fdf4361ee9cc00.jpg

    

    2、以管理员的方式进入到cmd窗口,并进入到memcache所在的目录

        memcache.exe  –d install  安装:安装完成后,通过Windows+R调出运行界面输入services.msc查看服务如下

        f6b81c828f0313da0ad271720b5abedf87c.jpg

    3、安装完成后,启动memcache服务

        memcached.exe –d start

        启动后,可以通过netstat –an命令查看memcahce的端口是否监听状态,memcache的端口号是,11211

        af1ad5a7ae457c7513c43868f712c047f31.jpg

    4、安装可能失败的原因: 

        a 如果你是用win7,win8系统,他对安全性要求高,因此,需要大家使用管理员的身份来安装和启动. 具体是 程序开始===>所有程序==》附件==》cmd(单击右键,选择以管理员的身份来执行)

        b存放memcached.exe 目录不要有中文或者特殊字符

        c 安装成功,但是启动会报告一个错误信息,提示缺少xx.dll ,你可以从别的机器拷贝该dll文件,然后放入到system32下即可.

        d如果上面三个方法都不可以,可以直接 cmd>memcached.exe  -p  端口 【这种方式不能关闭窗口】

    5、在启动时指定的一些基本命令

        -p 监听的端口     -l <ip地址>绑定地址(默认:所有都允许,无论内外网或者本机ip,有安全隐患,若设置为127.0.0.1就只能本机访问)
        -d start 启动memcached服务     -d restart 重起memcached服务     -d stop|shutdown 关闭正在运行的memcached服务
        -d install 安装memcached服务     -d uninstall 卸载memcached服务    -u 以的身份运行 (仅在以root运行的时候有效)
        -m 最大内存使用,单位MB。默认64MB     -M 内存耗尽时返回错误,而不是删除项     -c 最大同时连接数,默认是1024
        -f 块大小增长因子,默认是1.25     -n 最小分配空间,key+value+flags默认是48     -h 显示帮助

三、如何连接memcache服务器进行使用

    60e5d117666ece9f0780f910575469a5b03.jpg

四、使用telnet连接到memcache服务器(类似于黑窗口)

    连接方式:telnet ip地址  端口号    telnet localhost 11211

    数据存储格式:类似于关联数组

    第一列                               第二列

    键名(一般是字符串)       具体的数据内容(除了资源)

    增删改查操作

    1、添加数据

        add 键的名称  0  缓存的时间  数据的长度  (回车后添加内容)  0表示不压缩:

        比如:add color 0 100 3   表示向memcache里面添加的数据键为color,缓存的周期是100秒,数据的长度是3

        49eed6576f68ffa04823aa12b39f946b043.jpg

    2、获取数据

        get 键名    get color

    3、修改数据 

        replace 要求键名必须存在,如果不存在,则提示一个错误。

        set set 指令也可以替换数据,如果键存在则替换,如果不存在,则等于添加。

        076f9fb26af0afaa2272464621b4072df8e.jpg

    4、删除数据

        基本语法:delete  键名称 

        flush_all 清空所有的数据

    5、其他的一些命令

        698b217829b16848a6b3029f8dd05697eb5.jpg

    6、获取memcache查询的成功率

        memcache查询效率 = get_hits / cmd_get

        31ea07bce7d88c5ffcaed0259a26e816c70.jpg

五、通过php来连接memcache服务器

    1、从网上下载memcache php的扩展,该扩展要和php的版本一致。要下载php版本对应的memcache的扩展。

    2、把对应的memcache扩展拷贝到php安装目录的ext下面。

    3、修改php配置文件php.ini打开扩展支持    extension=php_memcache.dll

    4、重启apache,通过运行phpinfo()函数来进行测试。

    5、简单使用,可以存储字符串、整数、小数、对象、数组,其中存储数组时只能是一维数组,存储时以序列化方式存储        

<?php
$mem=new Memcache();
$mem->connect("localhost",11211);
//先完成数据的取出
//如果把取出的data数据给缓存到memcache里面
//取出的数据是由sql语句决定的。键由sql语句字符串,值就是取出的数据
$sql = "select title from dede_archives limit 5";
$key = md5($sql);
echo $key;
//先从memcache里面取出数据
$data = $mem->get($key);//根据键名称从memcache里面取出数据
//判断是否取出数据,如果数据为空,则从数据库里面获取数据。
if(!$data){
    $conn = mysql_connect("localhost",'root','root');
    mysql_query("use itdede");
    //mysql_select_db();
    mysql_query("set names utf8");
    $res = mysql_query($sql,$conn);
    $data = array();
    while($row=mysql_fetch_assoc($res)){
        $data[]=$row;
    }
    //从数据库里面获取的数据,添加到memcache里面。
    $mem->add($key,$data,MEMCACHE_COMPRESSED,100);  
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">
<head>
<title>新建网页</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="description" content="" />
<meta name="keywords" content="" />
<script type="text/javascript"></script>
<style type="text/css"></style>
</head>
    <body>
    <?php foreach($data as $v){?>
    <li><?php echo $v['title']?></li>
    <?php }?>
    </body>
</html>

六、通过使用memcahe客户端源码连接操作memcache服务器

    使用范围:在没有php操作memcache扩展的前提下使用,推荐使用php,memcache的扩展。

    测试前:要关闭扩展。具体的使用步骤:

    1、把源码文件拷贝到项目的指定位置。0149d68c721fe26e1b05e7b7f6fbfd50f39.jpg

    2、引入源码文件

七、把session文件存储到memcache

    方法一:在php.ini文件中配置

        1、设置存储方式:    session.save_handler=memcache

        2、设置存储位置:session.save_path="tcp://localhost:11211,tpc://192.168.1.89:11211"

        session文件存储到memcache是通过sessionid作键的;把session文件存储到memcache后,不影响session的任何操作。

    方法二:直接在文件中设置,其实这样更好,因为不会影响到别人的使用session的方式  

        ini_set("session.save_handler","memcache");

        ini_set("session.save_path","tcp://localhost:11211");

八、memcache的分布式存储

    原理如下图:                                                                    具体代码如下图:

    e82046d30ab037751b2fcf1ba52c0f492d3.jpg    3049970498767c8866df82ed9e702519790.jpg

    如果只有一台电脑,无需虚拟机也可以模拟两台memcache 服务器。可以通过memcached.exe –p 11210来开启。

    具体代码如图:d37558d68af2b58fd136442943e2431f187.jpg

九、memcache的细节讨论

    1、生命周期的问题

        ①秒数,但是有限制,不能超过 2592000秒(30天)。

        ②时间戳,比如我们要设置超过1个月,则如下设置

            $mem->add('name1','yangguang',MEMCACHE_COMPRESSED,time()+3600*24*31);如果设置为0,则表示永不过期。

            存储到memcache里面的数据,什么情况下会丢失:

            (1)生命周期到了(2)关闭memcache服务(3)关机,重启。

    2、memcache中善于存储哪些数据

        ①更新比较频繁的数据(用户的在线状态),查询比较频繁,数据量不是很大。

        ②安全性不是很高。

        如果没有memcache这个产品,可以通过mysql的memory存储引擎。

    3、memcache的安全性

        5cc3aaaca0bfa4d5e14539d477825e2cd51.jpg

        ①内网(两块网卡,memcache在启动时指定那台访问) 

            memcached –d –u root –l 192.168.1.100 –p 11211.指定只有192.168.1.100服务器才能访问。 

        ②防火墙 

            在linux中,设置命令:iptables -a input -p 协议 -s 可以访问ip -dport 端口 -j ACCEPT

            例如: 

                iptables –a input –p tcp –s 192.168.1.1 –dport 11211 –j ACCEPT

                iptables –a input –p tcp –s 192.168.1.1 –dport 11211 –j ACCEPT

    4、Memcached机制深入了解

        ①基于c/s架构,协议简单  b3575789793ddcdbc357c86512d02a73c5f.jpg

        ②基于libevent的事件处理85a5dcdc5cfc4096e48e4b817931a1fa8ae.jpg

        ③内置内存存储方式c8c56781325b8896f4ec357a5ecea1ff493.jpg

        ④基于客户端的分布式aea93643a996f2983f6d06886fd0c36c7ce.jpg

Redis

一、基本介绍

    redis是一个开源的,先进的key-value存储。它通常被称为数据结构服务器,因为键可以包含字符串哈希链表集合有序集合

    (1)架构方式:c/s   客户端和服务器

    (2)redis不仅可以存储到内存中,而且可以把数据同步到硬盘中,达到数据的存储持久化。

    (3)redis数据存储是键值对,存储的值的类型有五种:string(字符串),hash(哈希),list(链表),set(无序集合),zset(有序集合),这些数据类型都支持push/pop、add/remove及取交集和并集及更丰富的操作、Redis支持各种不同方式的排序。

    (4)提供的API语言包括:C C++ C# Clojure Common Lisp Erlang Haskell Java Javascript Lua Objective-C Perl PHP Python Ruby Scala Go Tcl

二、redis的安装

    1、下载安装包

        http://redis.googlecode.com/files/redis-2.4.17.tar.gz

    2、编译程序

        tar zxvf redis-2.4.17.tar.gz

        cd redis-2.4.17

        make

        cd src &&  make install

    3、为了便于管理,新建redis的管理目录

        mkdir -p /usr/local/redis/bin

        mkdir -p /usr/local/redis/etc

    4、把配置文件移动到新建的etc目录下面(配置文件在redis解压目录中)

        mv redis.conf /usr/local/redis/etc

    5、把解压目录下面的src目录下面的一些文件移动到新建的bin目录下

        mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server /usr/local/redis/bin

    6、启动服务,通过bin目录下面的redis-server

        启动格式:redis-server  指定的配置文件

        /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf

    7、启动后会占用当前的会话窗口,我们应该让他在后台启动,因此要修改配置文件

        打开配置文件/etc/redis.conf,如果需要在后台运行,把daemonize项改为yes

    8、关闭redis的服务重新启动

        pkill redis-server

        97b3b2c977ae97c6928297acf574c97e678.jpg

    9、客户端连接

        64d5b6e009ad463ed1209a7d3d90ddbc480.jpg

三、redis的数据类型

    string(字符串):类似于memcache里面的数据存储方式    key values

    25de213fe1664ad8cf23815bbeff0a78ed2.jpg

    hash(哈希):类似于关系型数据库里面的行,也是键值对,值里面又有键值对

    096c0a80215d20447aea67e1a494acf9f29.jpg

    list(链表):可以模拟队列和栈。数据存储是有顺序的。

        队列:先进先出。栈:先进后出。

    set(集合) 集合的示意图:

    9e20a017d24309ce2f6ca73dfa304129d07.jpg

    zset(有序集合) 集合里面的内容是有序的

    ed9d40e41b30bf2543cac9d54d0a4af728d.jpg

四、redis的数据类型相关命令

    1、string类型

        String是最简单的类型,一个 key对应一个Value,String类型是二进制安全的。Redis的 string可以包含任何数据,比如jpg图片或者序列化的对象。

        (1)set设置键值

                语法:set  键名称  值。set name zhangsan,重新设置则直接覆盖

        (2)get获取key对应的string值,如果key不存在返回nil

                语法:get 键值。get name

        (3)setnx设置键时,先判断否存在,如果已经存在则设置不成功,返回0,nx是not exist。

                setnx name zhangsan

        (4)setex设置key对应string类型的value,并指定键的有效期。

                语法:setex 名称 有效期   值。setex color 10 red

        (5)setrange替换字符串中字符。

                语法:setrange 键名称 开始替换序号 替换的内容。setrange email 7 qq.com

        (6)mset一次设置多个key的值,成功返回ok表示所有的值都设置了,失败返回0表示没有任何值被设置

                语法: mset 名称1   值1   名称2    值2        mset name lisi age 18 height 168

        (7)msetnx一次设置多个key,成功返回ok表示所有值都设置了,失败返回0表示没有任何值被设置,不覆盖已存在key

                msetnx name lisi age 18 height 168

        (8)getset设置key的值,并返回key的旧值。

                getset name wangwu

        (9)getrange获取key的value值的范围内的子字符串

                getrange name 0 5

        (10)mget一次获取多个key的值,如果对应key不存在则对应返回nil。

                mget name age height

        (11)incr对key值做加加操作并返回新值。incrby同incr类似,加指定值,key不存在会设置key,并认为原来value是0

                incr age        incrby age 45

        (12)decr对key值做减减操作。decrby同decr类似,减指定值

                decr age        decrby age 45

        (13)append给指定key的字符串追加value,返回新字符串值的长度

                append name is man

        (14)strlen取指定key的value值的长度

                strlen name

    2、hashes类型

        Redis hash是一个string类型的field和value的映射表。它的添加、删除操作都是0(1)(平均)。hash特别适合用于存储对象。相较于将对象的每个字段存成单个string类型。将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。

        (1)hset设置hash field为指定值,如果 key不存在,则先创建。

                语法: hset  哈希名称  字段名称   值    hset myhash name xiaowang

        (2)hget取出hash field的值。

                语法:hget 哈希名称  字段名称    hget myhash name

        (3)hsetnx设置hash field为指定值,如果key不存在,则先创建,如果存在则返回0。

                hsetnx myhash name lisi

        (4)hmset同时设置hash的多个field

                语法:hmset 哈希名称  field1  value1 field2 value2    hmset hash2 name yuguo age 77

        (5)hmget获取全部指定的hash field

                语法:hmget 哈希名称 field1 field2    hmset hash2 name age

        (6)hincrby指定的 hash  field加上给定的值

                hincrby hash2 age 20

        (7)hexists测试指定的 field是否存在

                hexists hash2 age

        (8)hlen返回指定hash的field数量

                hlen hash2

        (9)hdel删除指定hash的field

                语法:hdel 哈希名 field    hdel hash2 age

        (10)hkeys返回hash的所有field

                hkeys hash2

        (11)hvals返回hash的所有 value

                hvals hash2

        (12)hgetall获取某个hash中全部的field及value

                hgetall hash2

    3、lists类型及操作

        list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等,操作中key 理解为链表的名字。redis的list类型其实就是一个每个子元素都是string 类型的双向链表。我们可以通过push、pop操作从链表的头部或者尾部添加删除元素,这样list既可以作为栈,又可以作为队列。

        (1)lpush在key对应list的头部添加字符串元素。

                语法:lpush 链表名称  值内容

        (2)lrange获取链表里面的值

                语法:lrange 链表名称  0 -1,注意0 和 -1 表示取值范围,从头部到尾部。

                dc984037c849686654fec524ec8eec14566.jpg

        (3)rpush在key对应list的尾部添加字符串元素。

                语法:rpush 链表名称  值内容

                01fa8ac73b79872bc9940df8ea20d1d9ff9.jpg

        (4)linsert在key对应list的特定位置前或后添加字符串

                d068a2a4c1fcafc3c76e62f40aefc240d17.jpg

        (5)lset设置list中指定下标的元素值。注:下标从0开始计算

                f17b6d810a4f1581de8280d7203e5f22a26.jpg

        (6)lrem从key对应list中删除n个和value相同的元素。(n<0从尾删除,n=0全部删除)

                d7fc95d30c3f6c5d2ba25c857d5e3a5394a.jpg

        (7)ltrim保留指定key的值范围内的数据

                8b53242477526fb92e5bd0907a6d5942776.jpg

        (8)lpop从list的头部删除元素,并返回删除元素

                82b6f50f58ad99e6a4facfceb4a03e7d7bb.jpg

        (9)rpop从 list的尾部删除元素,并返回删除元素

                2b6b66823cc9df7cf1d17c9dc1eb0c2a117.jpg

        (10)rpoplpush从第一个list的尾部移除元素并添加到第二个list的头部

                7125bac06c33adedf65e2fd437eea0e154a.jpg

        (11)lindex返回名称为key的list中 index位置的元素

                56156090ca74770705d342abb58c2e4a09c.jpg

        (12)llen返回key对应list的长度

                211319fb7044d968bc17ae5b935104454f8.jpg

    4、sets类型及操作

        set是集合,它是string类型的无序集合。set是通过hash table实现的、添加、删除和查找的复杂度都是0(1)。对集合我们可以取并集、交集、差集。通过这些操作我们可以实现sns中的好友推荐和blog的tag功能。

        (1)sadd向名称为key 的set中添加元素

                语法:sadd 集合名   元素

        (2)smembers 获取集合中内容,语法:smembers 集合名称

                e141d6372e898dbbf649d35276ec7b5530f.jpg

        (3)srem删除名称为key的set中的元素

                9dabfaa5038a06ee2510ae2036e67b0456c.jpg

        (4)spop随机返回并删除名称为key的set中一个元素

                48e9f37481f8a3ccb9501b1261173bd7fdc.jpg

        (5)sdiff返回所有给定key与第一个key的差集

                b55b529d46f439dbfcada301dbbca92f833.jpg

        (6)sdiffstore返回所有给定key与第一个key的差集,并将结果存为另一个key。

                语法:sdiffstore 新的集合  集合1   集合2

                c28848b0580bd95cb328b713645335eda65.jpg

        (7)sinter返回所有给定key的交集

                535c2c540ee0ec90b143119b46cc9ff19e1.jpg

        (8)sinterstore返回所有给定key的交集,并将结果存为另一个key

                53a03653b5b31b96a013afc6151d105058a.jpg

        (9)sunion返回所有给定key的并集

                238676b00fdb659e94af3da0520da579285.jpg

        (10)sunionstore返回所有给定key的并集

                ee84d2197363dd1308e0dfe1f7349d207c9.jpg

        (11)smove从第一个key对应的set中移除member并添加到第二个对应的set中

                ba489c767921ac5720ecc8f5c7579e9d705.jpg

        (12)scard返回名称为key的set的元素个数

                5b171b64be2eed88e7f757b622d665f92cc.jpg

        (13)sismember测试member是否是名称为 key的set的元素

                5715ceed585f3c6c60c907ec4b5a5a964c5.jpg

        (14)srandmember随机返回名称为key的set的一个元素,但不删除元素

                014e1cb78ed3106f8450be251438c5a2422.jpg

    5、sorted sets类型及操作

        sorted set是set的一个升级版本,他在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。可以理解为有两列的mysql表,一列存value,一列存顺序。操作中的key理解为zset的名字。

        (1)zadd向名称为key的zset中添加元素。如果该元素存在,则更新其顺序。

                语法:zadd 集合名  序号  内容

                e05918e6a1ade89f2a968df7528a7703360.jpg

        (2)zrange获取有序集合中的内容

                2e98aab0331889764abbdb1036909f9d28b.jpg

        (3)zrem删除名称为key的zset中的元素member

                422c11b66962012ddbd9f683dc07845a35c.jpg

        (4)zincrby如果在名称为key的zset中已存在元素member,则该元素的score增加increment否则向该集合中添加该元素,其score的值为increment

                9a3a451aea81575e2fde6dccaaba5231872.jpg

        (5)zrank返回名称为key的zset中member元素的排名(按score从小到大排序)即下标

                55f3463b4ac1ae01c7d770688fe5315b3f5.jpg

        (6)zrevrank返回名称为key的zset中member元素的排名(按score从大到小排序)即下标

                7c14d01885cb24be196f1f93429ff9e0d2c.jpg

        (7)zrevrange返回名称为key的zset(按score从大到小顺序)中的index从start到end的所有元素

                c114e3e22b63be3cfc4a7441fde0ffe0d49.jpg

        (8)zrangebyscore返回集合中score在给定区间的元素

                f3800d80b8b6e6e6cade55a1c4ef0293d7f.jpg

        (9)zcount返回集合中score在给定区间的数量

                9d54dd2e1e8451f5ac82a36dcb347a077e8.jpg

        (10)zcard返回集合中元素的个数

                6702c45c937de2b74991e7e03d6f1f2bb6a.jpg

        (11)zremrangebyrank删除集合中排名在给定区间的元素

                97a31d7c0861b5b7d0611882b4a08434c6f.jpg

        (12)zremrangebyscore删除集合中score在给定区间的元素

                2ebe8ab315c6d0a41c831f627c06c293b0d.jpg

五、redis常用命令

    redis提供了丰富的命令对数据库和各种数据库类型进行操作,这些命令可以在linux终端使用。

    1、键值相关的命令

        (1)keys返回满足给定参数的所有key。用表达式*,代表取出所有的key

                0e5125f20cfc29ef1df2f6161b7890af272.jpg

        (2)exists确认一个key是否存在

                a49089ce8f7e03145f4daa117e046710251.jpg

        (3)expire设置一个key的过期时间

                e3c3f6637b8792c42793e93ecebd329e030.jpg

        (4)move将当前数据库中的key转移到其它数据库中

                d1f27ccb30cf840ffb8763ca6c5e1ffa81b.jpg

        (5)persist移除给定key的过期时间

                ea5cb0cf5cce8d3b35fd327a003fae303a1.jpg

        (6)randomkey随机返回key空间的一个key

                3eee16fedf523764690dbf0f4d8927397d6.jpg

        (7)rename重命名key

                3a8189d2cc6b1ebe7680965cee61544d6b0.jpg

        (8)type:返回值的类型

                19a70fff01dfe7a552c2a1d0433de56c0e8.jpg

    2、服务器相关命令

        (1)select选择数据库。redis数据库编号从0-15,我们可以选择任一个进行数据的存取,若不在编号内会报错

                9f2e279e5b7fcc2c9c60ac6284e40e2374d.jpg

        (2)quit退出连接

                604c0d4975ea906d959e542e6f881d7ebc3.jpg

        (3)dbsize返回当前数据库中key的数目

                94a672ab2e98e5d2ba5087e787035986344.jpg

        (4)info获取服务器的信息和统计

                4e94bdbebf780e25aa4f638b6a8605766e4.jpg

        (5)config get获取参数的配置。

                本例中我们获取了dir这个参数配置的值,如果想获取全部参数的配置只需要执行”config get *”即可将全部的值都显示出来

                4a3c575dfe73fab84acf8930e03827ee396.jpg

        (6)flushdb删除当前选择数据库中的所有key

                d4c992f463ca0ff9f6b7df89a67670c2781.jpg

        (7)flushall删除所有数据库中的所有的 key

                f2a82c8168bb7e7432a1475d10dc1d7ce31.jpg

六、redis的安全性

    设置客户端连接后进行任何其他操作前需要使用密码。注意:因为 redis速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进行150k次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解。

    1、设置密码的方式,打开redis的配置文件

        #requirepass 设置的密码        设置完密码后,redis服务要重启

        比如:requirepass guangzhou

    2、设置完成密码后,客户端登录方式

        第一种方式:登录后,执行auth 设置的密码  后才能操作,否则不能任何操作

        ef595fe0fe2ccae545980ead5fd8544c63a.jpg

        第二种方式:在登录时,输入密码    /usr/local/redis/bin/redis-cli  –a  设置的密码

        10e11d280726ad4688fdb52347c3f8ed726.jpg

七、持久化机制

    redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保证持久化。

    redis支持两种持久化方式:

    1、snapshotting(快照)默认方式

        快照是默认的持久化方式。这种方式是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。可以通过配置设置自动做快照持久化的方式。我们可以配置redis在n秒内如果超过mkey修改就自动做快照。

        9a73a1dc960c9fed0c2e1b3b5271a1f62e3.jpg

        快照方式的缺点:由于快照方式是在一定间隔做一次的,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改。

    2、append-only file( 缩写aof)的方式

        aof比快照方式有更好的持久化性,是由于在使用aof时,redis会将每一个收到的写命令都通过write函数追加到文件中,当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。

        当然由于os会在内核中缓存write做的修改,所以可能不是立即写到磁盘上。这样aof方式的持久化也还是有可能会丢失部分修改。可以通过配置文件告诉reids我们想要通过fsync函数强制os写入到磁盘的时机。

        b11dff7f0890bc62885f2f243a68248af3b.jpg

八、redis配置文件常用的项

    daemonize如果需要在后台运行,把该项改为yes            pidfile:配置多个pid的地址 默认在/var/run/redis.pid

    bind:绑定ip,设置后只接受来自该ip的请求                     port:监听端口,默认为6379

    timeout:设置客户端连接时的超时时间,单位为秒。      logfile:配置log文件的地址。

    databases:设置数据库的个数,默认使用的数据库为0    sava:设置redis进行数据库镜像的频率。

    rdbcompression:在进行镜像备份时,是否进行压缩。     Dbfilename:镜像备份文件的文件名。

    Dir:数据库镜像备份的文件放置路径。                              Slaveof:设置数据库为其他数据库的从数据库。

    Masterauth:主数据库连接需要的密码验证。                 Requirepass:设置登录时需要使用的密码。

    Maxclients:限制同时连接的客户数量                               Maxmemory:设置redis能够使用的最大内存。

    Appendonly:开启append only模式。

九、php支持redis

    1、下载扩展,在下载扩展时要注意,和php的版本要兼容

    2、把对应的扩展拷贝到,php的安装目录ext目录下面

            e3eecb12c87c56b3a3dc3cfe33d1906a26c.jpg

    3、打开php.ini文件,引入扩展

            966fd2da2e61d149f99ed786f48781502a7.jpg

    4、重启apache进行测试,写一个文件,运行phpinfo()函数测试

            0443abf0306d2e1d87027450a8cd94a7be2.jpg

    5、基本使用

            f0b49ee8eb1086f69e084aaf8422bcc082b.jpg

转载于:https://my.oschina.net/u/2555277/blog/3009746

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值