概述

Redis是一个基于key-value键值对的持久化数据库存储系统。redis支持的数据存储类型比memcached更丰富,包括strings(字符串),lists(列表),sets(集合)和sorted sets(有序集合)等。

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

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

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

redis特点

1.key-value键值类型存储

2.支持数据可靠存储及落地

3.单进程单线程高性能服务器

4.crash safe & recovery slow

5.单机qps可以达到10W

6.适合小数据量高速读写访问

Redis优点

1.与memcached不同,Redis可以持久化存储数据

2.性能很高:Redis能支持超过10W每秒的读写频率。

3.丰富的数据类型:Redis支持二进制的Strings,Lists,Hashes,Sets及sorted Sets等数据类型操作

4.原子:Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行

5.丰富的特性:Redis还支持publish/subscribe(发布/订阅),通知,key过期等等特性。

6.redis支持异机主从复制。

redis缺陷与陷阱

1.系统运行有毛刺

2.不同命令延迟差别极大

3.内存管理开销大(设置低于物理内存3/5)

4.buffer io造成系统OOM(内存溢出)

redis的数据类型

作为Key-value型存储系统数据库,Redis提供了键(Key)和值(value)映射关系。但是,除了常规的数值或字符串,Redis的键值还可以是以下形式之一,下面为最为常用的数据类型:

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

redis 持久化

通常,Redis将数据存储于内存中,或被配置为使用虚拟内存。通过两种方式可以实现数据持久化:

使用快照(snapshot)的方式,将内存中的数据不断写入磁盘,或使用类似MySQL的binlog日志

aof (但并不用于主从同步)方式,记录每次更新的日志。前者性能较高,但是可能会引起一定程度的数据丢失;后者相反。

#Snapshot(快照)
save #900秒有1key容量被更新,则触发快照写入磁盘
save
save

#AOF(更新日志)
appendfsync always #总是记录更新内容
appendfsync everysec #每秒记录更新内容
appendfsync no #不记录更新内容

特别提示:

如果选择了快照的策略,那么快照在每次进行保存的时候,都会阻碍执行前端的客户端请求。 快照会一次性将内存里的数据全都写进磁盘。

Redis的生产经验教训

1.一定要进行Master-slave主从同步配置,在出现服务故障时可以切换

2.在master禁用数据持久化,只需要在slave上配置数据持久化

3.物理内存+虚拟内存不足,这个时候dump一直死着,时间久了机器挂掉。这个情况就是灾难!

4.当Redis物理内存使用超过内存总容量的3/5时就会开始比较危险了,就开始做swap,内存碎片大!

5.当达到最大内存时,会清空带有过期时间的key,即使key未到过期时间。

6.redis与DB同步写的问题,先写DB,后写redis,因为写内存基本上没有问题。

Redis的服务器4.0版本源码编译安装

系统:Centos7

版本:redis4.0

redis下载地址:https://redis.io/download

redis源码编译

yum -y install wget gcc gcc-c++ make tar openssl-devel cmake
tar xf redis-4.0.10.tar.gz -C /usr/src/
cd /usr/src/redis-4.0.10/
make;make MALLOC=jemalloc;make PREFIX=/usr/local/redis install
mkdir -p /usr/local/redis/conf
cp /usr/src/redis-4.0.10/redis.conf /usr/local/redis/conf/
cp /usr/src/redis-4.0.10/sentinel.conf /usr/local/redis/conf/
ln -s /usr/local/redis/bin/* /usr/local/bin/

redis-server --version     #服务端连接命令
Redis server v=4.0.10 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=d2228e273f4aff2f

redis-cli --version     #客户端连接命令
redis-cli 4.0.10    

编译安装命令执行完成之后,会在/usr/local/redis/bin/目录下生成5个可执行文件,分别是:

redis-server      #Redis服务器的daemon启动程序
redis-cli   #Redis命令操作工具。当然,你也可以用telnet根据其纯文本协议来操作
redis-benchmark   #Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能。
redis-check-aof   #对更新日志appendonly.aof检查,是否可用,类似检查mysql binlog的工具
redis-check-dump #用于本地数据库rdb文件的检查

Redis的服务器启动和系统参数调整

简化redis配置文件

cp /usr/local/redis/conf/redis.conf{,.bak}               #备份配租文件
egrep -v "^$|^#" /usr/local/redis/conf/redis.conf.bak > /usr/local/redis/conf/redis.conf #简化配置文件
mkdir -p /data/redis/ #创建redis数据目录

更改redis配置文件/usr/local/redis/conf/redis.conf

#修改redis配置文件以下参数
cat -n conf/redis.conf | sed -n '1p;3p;4p;7p;9p;11p;21p'
bind 127.0.0.1
port
tcp-backlog
daemonize no
pidfile /var/run/redis_6379.pid
logfile ""
dir ./
#修改成以下设置
cat -n conf/redis.conf | sed -n '1p;3p;4p;7p;9p;11p'
bind 0.0.0.0 #监听地址
port #监听端口
tcp-backlog #tcp连接数
daemonize yes #是否后台启动
pidfile /data/redis/redis.pid #pid存放目录
logfile "/data/redis/redis.log" #日志存放目录
dir /data/redis/ #工作目录

redis服务器启动和关闭

#启动redis服务器
redis-server /usr/local/redis/conf/redis.conf
netstat -antup | grep redis
#关闭redis服务器
redis-cli shutdown
netstat -antup | grep redis
#连接redis服务器
redis-server /usr/local/redis/conf/redis.conf
redis-cli -h 127.0.0.1

系统参数优化调整

#启动redis以后,我们查看系统日志
cat /data/redis/redis.log
cat /data/redis/redis.log
:C Aug ::02.029 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
:C Aug ::02.029 # Redis version=4.0., bits=, commit=, modified=, pid=, just started
:C Aug ::02.029 # Configuration loaded
:M Aug ::02.033 * Increased maximum number of open files to (it was originally set to ).
                 #警告提示1:系统文件描述符设置的太小了,才1024,我们最好设置到10032
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 4.0. (/) bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port:
| `-._ `._ / _.-' | PID: 7703
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-' :M Aug ::02.035 # WARNING: The TCP backlog setting of cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of .
                #由于/proc/sys/net/core/somaxconn设置为较低的128,因此无法强制设置1024的TCP backlog。
:M Aug ::02.035 # Server initialized
:M Aug ::02.035 # WARNING overcommit_memory is set to ! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
                #警告提示3:overcommit_memory=0为不允许超额抢占内存,但是,rdb保存可能会失败。建议将vm.overcommit_memory = 1进行修改
:M Aug ::02.035 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
                #警告提示4:你的内核中启用了巨大内存页的支持,这将与redis的延迟内存使用冲突。
:M Aug ::02.035 * Ready to accept connections

(1)调整系统文件描述符

echo "* - nofile 10240" >> /etc/security/limits.conf
bash        #刷新下即生效
ulimit -n

(2)调整系统的TCP连接数

 sysctl -a | grep soma
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.eth0.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
net.core.somaxconn = echo "net.core.somaxconn = 10240" >> /etc/sysctl.conf sysctl -p
net.core.somaxconn =

(3)调整系统内存分配策略

echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
sysctl -p
net.core.somaxconn =
vm.overcommit_memory =

vm.overcommit_memory参数说明: 
根据内核文档,该参数有三个值,分别是: 
0:当用户空间请求更多的内存时,内核尝试估算出剩余可用的内存。 
1:当设这个参数值为1时,内核允许超量使用内存直到用完为止,主要用于科学计算 
2:当设这个参数值为2时,内核会使用一个绝不过量使用内存的算法,即系统整个内存地址空间不能超过swap+50%的RAM值,50%参数的设定是在overcommit_ratio中设定。

(4)关闭系统内核的巨大内存页支持

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
#添加到/etc/rc.local
echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local
echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.local

(5)重启redis的服务器验证修改

redis-cli shutdown        #关闭redis
> /data/redis/redis.log    #清空redis日志
redis-server /usr/local/redis/conf/redis.conf        #启动redis cat /data/redis/redis.log           #查看redis日志
:C Aug ::42.049 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
:C Aug ::42.050 # Redis version=4.0., bits=, commit=, modified=, pid=, just started
:C Aug ::42.050 # Configuration loaded
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 4.0. (/) bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port:
| `-._ `._ / _.-' | PID: 8065
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-' :M Aug ::42.055 # Server initialized
:M Aug ::42.055 * DB loaded from disk: 0.000 seconds
:M Aug ::42.055 * Ready to accept connections

为php安装redis客户端扩展

(1)获取源码包

wget https://github.com/phpredis/phpredis/archive/2.2.4.tar.gz

(2)安装

unzip phpredis-master.zip       #解压
cd /usr/src/phpredis-master/
/usr/local/php/bin/phpize

如果出现以下报错

Configuring for:
PHP Api Version:
Zend Module Api No:
Zend Extension Api No:
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.
yum install m4 autoconf         #安装这些解决
/usr/local/php/bin/phpize #再次执行
./configure --with-php-config=/usr/local/php/bin/php-config
#编译安装
make; make install

(3)修改php.ini设置,重启php

echo "extension = redis.so" >> /usr/local/php/lib/php.ini
#将php.ini配置文件中的extension_dir修改成如下:
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/"

安装Python redis客户端操作redis

wget https://pypi.python.org/packages/source/r/redis/redis-2.10.1.tar.gz
tar xf redis-2.10..tar.gz
cd redis-2.10.
python setup.py install

开发python程序操作redis

python
import redis #引用redis支持库
r = redis.Redis(host='192.168.50.157',port='',password='') #建立redis数据库的连接对象(面向对象方式)
r.set('name','wk') #操作对象调用set方法写入数据
True
r.get('name') #操作对象调用get方式读取数据
'wk'
 

 
 

redis 概述及部署 安装php和python客户端的更多相关文章

  1. Redis概述以及Linux安装

    Redis 概述 Redis是什么 Redis,Remote Dictionary Server,远程字典服务.是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.key-v ...

  2. Apache Ignite 学习笔记(一): Ignite介绍、部署安装和REST/SQL客户端使用

    Apache Ignite 介绍 Ignite是什么呢?先引用一段官网关于Ignite的描述: Ignite is memory-centric distributed database, cachi ...

  3. Redis3.2集群部署安装

    Redis集群部署安装 Linux版本:CentOS release 6.9 Redis 版本:redis-3.2.12.tar.gz 1.执行解压命令 tar -xzf redis-3.2.12.t ...

  4. Docker+Redis镜像的原理以及部署安装(超详解附截图)

    文章来源:公众号-智能化IT系统. 一. DOCKER介绍 Docker简介 (1)Docker 是一个开源的应用容器引擎,基于 Go 语言,并遵从Apache2.0协议开源. (2)Docker 可 ...

  5. 第四百零一节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署virtualenv虚拟环境安装,与Python虚拟环境批量安装模块

    第四百零一节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署virtualenv虚拟环境安装,与Python虚拟环境批量安装模块 virtualenv简介 1.安装virtuale ...

  6. redis 概述、windows版本下载启动访问退出安装、中文乱码、RedisDesktopManager下载

    redis 概述 redis的key是string类型的:value有多种类型,但放入的不是特定类型数据,添加的都是string,只是redis把这些值组织成了各种数据结构.key和相应的值都是str ...

  7. Python基础学习(一)之Python的概述与环境安装

    Python介绍 Python语言介绍 Python是一门高级的.面向对象的.解释性.脚本语言. 高级语言:贴近开发者,对应底层语言,底层语言贴近机器:java.C#.php .ruby 面向对象对应 ...

  8. 三十九.NoSQL概述 部署Redis服务 、 部署LNMP+Redis

    1. 搭建Redis服务器 在主机 192.168.4.50 上安装并启用 redis 服务 设置变量test,值为123 查看变量test的值   1.1 搭建redis服务器 1.1.1 安装re ...

  9. Redis 部署安装

    一.Redis介绍 Redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcache类似,但很大程度补偿了Memcache的不足,它支持存储的value类型相对更多 ...

随机推荐

  1. 【Distributed】大型网站高并发和高可用

    一.DNS域名解析 二.大型网站系统应有的特点 三.网站架构演变过程 3.1 传统架构 3.2 分布式架构 3.3 SOA架构 3.4 微服务架构 四.高并发设计原则 4.1 拆分系统 4.2 服务化 ...

  2. 【uoj#94】【集训队互测2015】胡策的统计(集合幂级数)

    题目传送门:http://uoj.ac/problem/94 这是一道集合幂级数的入门题目.我们先考虑求出每个点集的连通生成子图个数,记为$g_S$,再记$h_S$为点集$S$的生成子图个数,容易发现 ...

  3. 怎么解决Win7电脑更新出现80072EE2代码的错误?

    我们在使用Win7系统时经常会遇到更新,这些更新可以修复一些系统漏洞,提高系统的安全性.但有时我们在进行相关更新时会出现错误,而导致最后的更新失败.下面好系统重装助手就和大家分享一下Win7系统更新出 ...

  4. 【异常】Cannot run program "git" (in directory "/mnt/software/azkaban-3.79.0"): error=2, No such file or directory

    1 安装azkaban异常 cloudera-scm@cdh4 azkaban-3.79.0]$ ./gradlew build -x test Parallel execution with con ...

  5. golang shell 交叉编译

    #!/usr/bin/env bash set -e uname_s=`uname -s | awk '{print tolower($0)}'` uname_m=`uname -m` timeTag ...

  6. jemeter生成测试报告

    Jmeter生成测试报告   相对于Loadrunner,Jmeter其实也是可以有测试报告产出的,虽然一般都不用(没有Loadrunner的报告那么强大是一方面),还是顺手写一下吧,其实方法在用命令 ...

  7. vector和list插入性能对比

    int main() { clock_t t1 =clock(); vector<string> vec_Str; ;i<;i++) { vec_Str.push_back(&quo ...

  8. C# 设置程序开机自启动

    设置启动 //设置开机自启动 string path = Application.ExecutablePath; RegistryKey rk = Registry.LocalMachine; Reg ...

  9. MyEclipse6.5的速度性能优化大提速(转)

    MyEclipse是Eclipse的插件,也是一款功能强大的J2EE集成开发环境,支持代码编写.配置.测试以及除错.现在看一下MyEclipse6.5版本的速度性能优化大提速.优化MyEclipse6 ...

  10. Maven 配置问题 - could not find resource mybatis-config.xml

    需要在pom中加入以下代码 <build> <resources> <resource> <directory>src/main/resources&l ...