zoukankan      html  css  js  c++  java
  • 四、NOSQL之Redis持久化缓存服务基础实战第三部

    1.NOSQL的理解

          NOSQL是不仅仅是SQL,说的就是sql的补充,但是不能替代SQL。

    nosql库:memcached、memcachedb、redis

    2.redis 简介

            Redis是一个基于key-value键值对的持久化数据库存储系统,redis和memcached缓存服务很像,但是redis支持的数据存储类型更丰富,包括string(字符串)、list(链表)、set(集合)、zset(有序集合)等。

             Redis持久化缓存还会周期性的把更新的数据写入到磁盘以及把修改的操作记录追加到文件里记录下来,比memcached更有优势的是,redis还支持maser-slave(主从)同步,这和mysql很像。

    3.redis优点

    •    性能高:每秒支持100K读写;数据库一般也就几百
    •    丰富的数据类型:Redis支持String、lists、Hashes等
    •    原子:所有操作都是原子性的
    •   丰富的特性:Redis还支持publish/subscribe通知,key过期
    •   redis支持异机主从复制
    •   可以持久化存储数据

    4.redis的数据类型

         常用的5种:string、hash、list 、set、sorted set

    5.redis的应用场景

           Mysql数据库实际上是适合进行海量数据存储的,加上通过Memcached将热点数据存放到内存cache里,达到加速数据访问的目的,绝大部分公司都曾经使用过这样的架构,但是随着业务数据量的不断增加,和访问量的持续增长,很多问题就会暴露。

             1.需要不断的对mysql进行拆库拆表,memcached也需要不断扩容,扩容和维护工作占据大量开发运维时间。

             2.memcached与mysql数据库数据一致性问题是个老大难

             3.memcached数据命中率低或者down机,会导致大量访问直接穿透到数据库,导致mysql无法支撑访问。

             4.跨机房cach同步一致性问题

    场景:

           1.Redis最佳场景是内存

           2. memcached的替代场景

           3.除了key/value之外的更多数据类型支持时,使用Redis

           4.当存储的数据不能被剔除时,使用Redis更合适。

           5.支持负载均衡的场景(主从式,可以看成是数据库)

     6.redis的安装步骤

     1) cd /home/oldboy/tools/
     2) wget -q http://download.redis.io/releases/redis-2.8.9.tar.gz   -- -q表示 不显示的下载
     3) ls redis-2.8.9.tar.gz
     4) tar zxf redis-2.8.9.tar.gz
     5) cd redis-2.8.9
     6)less README ---可以读readme
     7)make MALLOC=jemalloc --编译
     8)make PREFIX=/application/redis-2.8.9 install  --编译安装
     9)ln -s /application/redis-2.8.9/ /application/redis    --建立软连接
     10)ll /application/    --查看
     11)tree /application/redis       目录展示

    在bin目录下有5个文件:

    redis-server:Redis服务器的daemon启动程序
    redis-cli:Redis命令行操作工具
    redis-benchmark:Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能
    redis-check-aof:更新日志检查
    redis-check-dump:用于本地数据库检查

     12) export PATH=/application/redis/bin/:$PATH   --环境变量配置
     13). /etc/profile   --环境变量生效
     14)which redis-server   --查看命令是否生效
     15)mkdir /application/redis/conf     --创建redis配置文件的生效目录
     16)cp redis.conf  /application/redis/conf/    --将下载的文件中的配置文件放到创建的配置目录里面
     17)redis-server /application/redis/conf/redis.conf &     --启动redis
     18)killall redis-server   --杀死进程 
     19)sysctl vm.overcommit_memory=1    ---当内存小的时候,需要执行此命令
     20)redis-server /application/redis/conf/redis.conf &   ---启动redis
     21)lsof -i:6379   --通过端口查看是否生效
     22)redis-cli shutdown    --关闭redis

     7.通过客户端测试redis服务

     连接本地服务器命令:redis-cli

    127.0.0.1:6379> set no001 djw
    OK
    127.0.0.1:6379> get no002
    "oldboy"
    127.0.0.1:6379> get no001
    "djw"
    [root@djw3 application]# redis-cli -h 192.168.0.102 -p 6379 get no002
    "oldboy"
    [root@djw3 application]# redis-cli del  no002                           
    (integer) 1
    [root@djw3 application]# redis-cli -h 192.168.0.102 -p 6379 get no002
    (nil)
    [root@djw3 application]# telnet 192.168.0.102 6379
    Trying 192.168.0.102...
    Connected to 192.168.0.102.
    Escape character is '^]'.
    get no001
    $3
    djw

     7.redis数据类型(常见的是五种:String字符串、Hash哈希、List列表数据、Set集合、Sorted set排序集合)

            其实这些了解下,开发、DBA一般会有自己的模式进行数据的定义,例如“object-type:id:field”就是不错的注意,像这样  user:1000:password,运维只要搭建好平台就行。

            字符串类型:如果是字符串类型,就是一个持久的memcached服务器了,也可以是二进制文件,比如图片,值的长度不能超过1GB。

    [root@djw3 ~]# redis-cli set  mykey "my blnary safe value"
    OK
    [root@djw3 ~]# redis-cli get mykey
    "my blnary safe value"

    可以计数:

    [root@djw3 ~]# redis-cli set  djw 100
    OK
    [root@djw3 ~]# redis-cli incr  djw    
    (integer) 101
    [root@djw3 ~]# redis-cli incr  djw
    (integer) 102
    [root@djw3 ~]# redis-cli incr  djw
    (integer) 103

     列表类型:

    [root@djw3 ~]# redis-cli  rpush messages "Hello have are you ?"
    (integer) 1
    [root@djw3 ~]# redis-cli  rpush messages "fine thanks I'm having fun with Redis"
    (integer) 2
    [root@djw3 ~]# redis-cli  rpush messages "I should look into this NOSQL thing ASAP"
    (integer) 3
    [root@djw3 ~]# redis-cli lrange messages 0 2              
    1) "Hello have are you ?"
    2) "fine thanks I'm having fun with Redis"
    3) "I should look into this NOSQL thing ASAP"

     集合:

    [root@djw3 ~]# redis-cli sadd myset a
    (integer) 1
    [root@djw3 ~]# redis-cli sadd myset b
    (integer) 1
    [root@djw3 ~]# redis-cli sadd myset c
    (integer) 1

    [root@djw3 ~]# redis-cli smembers myset

    1) "c"
    2) "b"
    3) "a"

    8.redis版本安装(可以是地址里面的版本进行了变化,我的安装并不是成功的,在make编译的时候报错,不必深究,知道有客户端即可)

     1.wget https://github.com/nicolasff/phpredis/archive/master.zip --no-check-certificate
     2.unzip master.zip
     3. cd phpredis-master/
     4. /application/php/bin/phpize
     5. ./configure --with-php-config=/application/php/bin/php-config
     6.make && make install
    echo "extension  = redis.so" >> /application/php/lib/php.ini

    9.对于redis的使用,可在其配置文件中进行配置。具体场景可根据企业需求进行

    [root@djw3 conf]# cd /application/redis/conf/redis.conf

  • 相关阅读:
    Codeforces Round #642 (Div. 3)
    [P4980] 【模板】Polya定理
    [SCOI2016] 幸运数字
    [P4389] 付公主的背包
    [CF438E] The Child and Binary Tree
    最长异或路径
    [AHOI2013] 作业
    [P4841] [集训队作业2013] 城市规划
    Python 第三方库国内镜像安装
    [CF1202D] Print a 1337-string...
  • 原文地址:https://www.cnblogs.com/dangjingwei/p/11844644.html
Copyright © 2011-2022 走看看