1 Redis 概述

  REmote DIctionary Server(Redis)是一个基于key-value键值对的持久化数据库存储系统。redis和大名鼎鼎的Memcached缓存服务软件很像,但是Redis支持的数据存储类型比Memcached更丰富,包括strings(字符串)、lists(列表)、sets(集合)和sorted sets(有序集合)等

  这些数据类型支持push/pop、add/remove及取交集、并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached缓存服务一样,为了保证效率,数据都是缓存在内存中提供服务。和memcached不同的是,redis持久化缓存服务还会周期性的把更新的数据写入到磁盘以及把修改的操作记录追加到文件里记录下来,比Memcached更有优势的是,redis还支持master-slave(主从)同步,这点很类似关系型数据库MySQL主从复制功能

  Redis是一个开源的使用C语言编写、支持网络、可基于内存亦可持久化的日志型、key-value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持

  Redis软件的出现,在一定程度上弥补了memcached这类key-value内存缓存服务的不足,在部分场合可以对关系数据库起到很好的补充作用。redis提供了Python,Ruby,Erlang,PHP客户端,使用起来很方便。Redis官方文档如下:

  https://redis.io/documentation

  http://redis.cn/

  1.1 Redis优点

  • 与memcached不同,Redis可以持久化存储数据
  • 性能很高:Redis能支持超过10W美妙的读写频率
  • 丰富的数据类型:Redis支持二进制的Strings,Lists,Hashes,Sets及sorted Sets等数据类型
  • 原子:Redis的所有操作都是原子性,同时Redis还支持对几个操作全并后的原子性执行
  • 丰富的特性:Redis还支持publish/subscribe(发布/订阅),通知,key过期等等特性
  • Redis支持异机主从复制

  1.2 缺点

  • 系统运行有毛刺
  • 不同命令延迟差别极大
  • 内存管理开销大
  • buffer io造成OOM

  1.3 Redis的数据类型

  • String 字符串
  • List 列表
  • Set 集合
  • Sorted set 有序集合

2 Redis的安装及使用

  Redis的生产经验教训

  • 要进行Master-slave主从同步配置,在出现服务故障时可以切换
  • 在master禁用数据持久化,只需在slave上配置数据持久化
  • 物理内存+虚拟内存不足,这个时候dump一直死这,时间久了机器挂掉。这个情况就是灾难!64-128G内存,SSD硬盘
  • 当Redis物理内存使用超过内存总容量的3/时就会开始比较危险了,就开始做SWAP,内存碎片打!
  • 当达到最大内存时,会清空带有过期时间的key,及时key未到过期时间
  • redis与DB同步写的问题,先写DB,厚些redis,因为写内存基本上没有问题

  2.1 redis环境部署

  1. Master10.0.0.1 Centos6.5 Redis-Master

  2.2 安装

  1. #Master
  2. [root@Redis-Master downloads]# wget http://download.redis.io/releases/redis-3.2.4.tar.gz
  3. [root@Redis-Master downloads]# tar zxf redis-3.2.4.tar.gz
  4. [root@Redis-Master downloads]# cd redis-3.2.4
  5. [root@Redis-Master redis-3.2.4]# make PREFIX=/usr/local/redis install
  6. #查看目录
  7. [root@Redis-Master redis-3.2.4]# ls /usr/local/redis/bin/
  8. redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server
  9. #只有这一个bin目录
  10. #redis-server:Redis服务器的daemon启动程序
  11. redis-cliRedis命令行操作工具。当然,你也可以用telnet根据其纯文本协议来操作
  12. redis-benckmarkRedis性能测试工具,测试Redis在你的系统及你的配置下的读写性能
  13. redis-check-aof:对更新日志appendonly.aof检查,是否可用,类似检查mysql binlog的工具
  14. redis-check-dump:用于本地数据库rdb文件的检查

  2.3 配置并启动redis服务

  1. 1、配置环境变量
  2. [root@Redis-Master /]# echo 'PATH=/usr/local/redis/bin/:$PATH' >>/etc/profile
  3. [root@Redis-Master /]# source /etc/profile
  4. 2、拷贝配置文件
  5. [root@Redis-Master /]# cd /tmp/downloads/redis-3.2.4
  6. [root@Redis-Master redis-3.2.4]# mkdir /usr/local/redis/conf
  7. [root@Redis-Master redis-3.2.4]# cp redis.conf /usr/local/redis/conf/
  8. 3、启动
  9. [root@Redis-Master /]# echo "vm.overcommit_memory = 1" >>/etc/sysctl.conf
  10. [root@Redis-Master /]# sysctl -p #以防后台保存失败
  11. [root@Redis-Master /]# redis-server /usr/local/redis/conf/redis.conf &
  12. #vm.overcommit_memory该参数有三个值,分别是:
  13. 0:当用户空间请求更多的内存时,内核尝试估算出剩余可用的内存
  14. 1:当设这个参数值为1时,内核允许超量使用内存知道用完为止,主要用于科学计算
  15. 2:当设这个参数值为2时,内核会使用一个绝不过量使用内存的算法,即系统整个内存地址空间不能超过swap+50%的RAM值,50%参数的设定是在overcommit_ratio中设定
  16. 4、关闭
  17. [root@Redis-Master /]# redis-cli shutdown save

  2.4 通过客户端来操作redis数据库

  1. 1、存值
  2. [root@Redis-Master /]# redis-cli
  3. 127.0.0.1:6379> set id 001
  4. OK
  5. 2、取值
  6. 127.0.0.1:6379> get id #可以get ket,无法get value
  7. "001"
  8. 3、删除
  9. 127.0.0.1:6379> del id #删除key
  10. (integer) 1
  11. 4、查看是否存在
  12. 127.0.0.1:6379> EXISTS id
  13. (integer) 0 #0为不存在
  14. 5、取所有
  15. 127.0.0.1:6379> keys *
  16.  
  17. #redis默认有16个库,0为开头
  18.  
  19. #远程连接
  20. [root@Redis-Master /]# redis-cli -h 10.0.0.1 -p 6379 #可以设置密码,跟mysql很像
  21. 10.0.0.1:6379>
  22.  
  23. #telnet和nc都可以操作

  2.5 redis的安全账户密码及授权权限

  1. [root@Redis-Master /]# cat /usr/local/redis/conf/redis.conf |grep requirepass
  2. # If the master is password protected (using the "requirepass" configuration
  3. # requirepass foobared
  4. requirepass 123.com
  5. 格式:[ requirepass ] [ password ]
  6. #123.com就是密码
  7. #重启redis
  8.  
  9. #测试
  10. 127.0.0.1:6379> set 1 daniel
  11. (error) NOAUTH Authentication required.
  12. #提示没认证
  13. 127.0.0.1:6379> auth 123.com
  14. OK
  15. #登录
  16. 127.0.0.1:6379> set 1 daniel
  17. OK
  18. #再次测试,成功
  19.  
  20. #或者
  21. [root@Redis-Master /]# redis-cli -a 123.com
  22. 127.0.0.1:6379>
  23. #可以直接输入密码后进入
  24.  
  25. #命令重命名
  26. [root@Redis-Master /]# grep rename-command /usr/local/redis/conf/redis.conf
  27. # security of read only slaves using 'rename-command' to shadow all the
  28. # rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
  29. # rename-command CONFIG ""
  30. rename-command set "se"
  31. #格式 [ rename-command ] [ CONFIG ] [ "" ]
  32. #测试
  33. [root@Redis-Master /]# redis-cli -a 123.com
  34. 127.0.0.1:6379> set 2 cat
  35. (error) ERR unknown command 'set'
  36. 127.0.0.1:6379> se 2 cat
  37. OK
  38. #set无法使用,se可以

  2.7 在php环境中安装redis的客户端扩展

  1. [root@RS02 downloads]# wget https://codeload.github.com/phpredis/phpredis/zip/develop
  2. [root@RS02 downloads]# unzip develop
  3. [root@RS02 downloads]# cd phpredis-develop/
  4. [root@RS02 phpredis-develop]# /usr/local/php5.6.33/bin/phpize
  5. [root@RS02 phpredis-develop]# ./configure --with-php-config=/usr/local/php5.6.33/bin/php-config
  6. [root@RS02 phpredis-develop]# make && make install
  7.  
  8. #修改php.ini,重启php
  9. [root@RS02 php5.6.33]# sed -i 's#; extension_dir = "./"#extension_dir = "/usr/local/php5.6.33/lib/php/extensions/no-debug-non-zts-20131226/"#g' /usr/local/php5.6.33/lib/php.ini
  10. [root@RS02 php5.6.33]# echo "extension = redis.so" >>/usr/local/php5.6.33/lib/php.ini
  11. [root@RS02 php5.6.33]# /usr/local/php5.6.33/sbin/php-fpm

    #出现这个信息就算正确

  2.8 开发php程序实战redis服务

  1. #开启redis的远程连接
  2. [root@Redis-Master /]# sed -i 's/bind 127.0.0.1/#bind 127.0.0.1/g' /usr/local/redis/conf/redis.conf
  3. #重启
  4. [root@RS02 php5.6.33]# cat /usr/local/nginx/html/index.php
  5. <?php
  6. $redis = new Redis();
  7. $redis->connect('10.0.0.1',6379) or die ("heh");
  8. $redis->auth('123.com');
  9. $redis->set('100','DANIEL');
  10. $var = $redis->get('100');
  11. echo "$var\n";
  12. ?>
  13. [root@Redis-Master /]# curl 10.0.0.81
  14. DANIEL
  15. 成功

  2.9 开发python程序实战操作redis服务

redis-day1的更多相关文章

  1. redis学习-day1

    1.nosql数据库的一种. 2.Redis 是一种开源的,先进的key-value存储.它通常被称为数据结构服务器.因为键可以包含字符串.哈希.链表.集合和有序集合. 特点: 3.为了保证效率,数据 ...

  2. redis数据类型及使用场景

    Redis数据类型  String: Strings 数据结构是简单的key-value类型,value其实不仅是String,也可以是数字. 常用命令:  set,get,decr,incr,mge ...

  3. redis 数据类型详解 以及 redis适用场景场合

    1.  MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的 ...

  4. redis系列-redis的使用场景

    redis越来越受大家欢迎,提升下速度,做下缓存,完成KPI之利器呀.翻译一篇文章<<How to take advantage of Redis just adding it to yo ...

  5. 让Redis在你的系统中发挥更大作用的几点建议

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/105.html?1455868313 Redis在很多方面与其他数据库解决 ...

  6. Redis应用场景-转载

    1.  MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的 ...

  7. Redis基础知识之—— 缓存应用场景

    转载原文:http://www.cnblogs.com/jinshengzhi/articles/5225718.html 一.MySql+Memcached架构的问题 Memcached采用客户端- ...

  8. 【转载】Redis的一些使用场景

    看了一些文章,关于Redis的使用场景,觉得挺好的.Redis肯定远远不止作为缓存而使用.Redis更像是一个实现很好的数据结构服务器,通过TCP栈协议提供服务.下面进行详细描述. http://da ...

  9. <转>Redis 应用场景

    http://blog.csdn.net/hguisu/article/details/8836819 1.  MySql+Memcached 架构的问题 Memcached采用客户端-服务器的架构, ...

  10. 转:Redis作者谈Redis应用场景

    毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象 ...

随机推荐

  1. C 标准库 - string.h之memcpy使用

    memcpy Copy block of memory Copies the values of num bytes from the location pointed to by source di ...

  2. 动画性能优化-requestAnimationFrame、GPU等

    最近在做一个场景动画,有一个欢迎界面和一个主动画界面,两个界面之间的连接通过一个进度条来完成,当进度条完成,提供通往主动画的按钮. 画面会从一个个的场景移动过去,用户可通过点击抽奖.查看气泡商铺等进行 ...

  3. bug:执行到数据库连接后停止运行,而且不报错的奇怪情况----可能是多方同时访问造成的

    数据库运行过程中奇怪停止. 即执行到“database connected ”停止运行,而且不产生任何报错信息 程序反复检查没有问题,折腾半天解决了: 可能是多个客户端操作同一个表格,多方同时操作造成 ...

  4. Connection连接、关闭数据库

    创建连接sql server数据库的字符一般有两种, 一种是以sql验证登录的 一种是以windows身份验证的 步骤: 引用命名空间System.Date.SqlClient 将连接方法声明至字符串 ...

  5. Android Viewpage 滑块

    依赖: implementation 'com.android.support:appcompat-v7:28.0.0' 在主页面layout <android.support.v4.view. ...

  6. 十八、fork/join框架

    一.简介 在hadoop的分布式计算框架MapReduce中,会经过两个过程Map过程和reduce过程.Map过程将任务并行计算,reduce汇总并行计算的结果,如图: MapReduce是在分布式 ...

  7. ecstore关于smarty语法调用

    以下是smarty语法 转自http://www.phpwindow.com/ecstore_smarty2.html assign 属性 类型 是否必须 描述 var string yes 被赋值的 ...

  8. oracle ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2)

    工作中遇到的一个问题,需要对某列进行分组排序,取其中排序的第一条数据项 用到了ROW_NUMBER() OVER(PARTITION BY COL1 ORDER BY COL2)来解决此问题. 实例准 ...

  9. linux centOs中安装好数据库,客户端用plsql连接oracle

    原创作品,转载请在文章显眼位置注明出处:https://www.cnblogs.com/sunshine5683/p/10030375.html 首先,回顾上篇 CenOs7安装oracle图文详细过 ...

  10. js串结构

    朴素匹配算法 //S 主串 T 模式串 //匹配失败,回溯 i = i - j + 1 j = 0 //匹配成功,返回位置 i - j function indexOf(S,T,pos = 0){ l ...