Redis高性能数据库

一、Redis概述

1、概述

redis是一个可持久化的单进程单线程key-value类型高速内存缓存系统,和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(列表)、set(集合)、zset(sorted set --有序集合)和hashs(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作。
与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB,并且在此基础上实现了master-slave(主从)同步,当前 Redis的应用已经非常广泛,国内像新浪、淘宝,国外像 Flickr、Github等均在使用Redis的缓存服务。

2、优点

1.性能极高--Redis能支持超过 100K+ 每秒的读写频率。
2.丰富的数据类型–Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
3.原子性--Redis的所有操作都是原子性(即所有操作要么成功要么失败不执行)
4.Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。

二、应用场景分析

1、MySql+Memcached架构的问题

实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇到了很多问题:

1.MySQL需要不断进行拆库拆表,Memcached也需不断跟着扩容,扩容和维护工作占据大量开发时间。 2.Memcached与MySQL数据库数据一致性问题。 3.Memcached数据命中率低或down机,大量访问直接穿透到DB,MySQL无法支撑。 4.跨机房cache同步问题。

2、Redis的应用场景

在这里插入图片描述
Redis更像一个加强版的Memcached
1.Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
2.Redis支持数据的备份,即master-slave模式的数据备份。
3.Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
4.Memcached: 动态系统中减轻数据库负载,提升性能;做缓存,适合多读少写,大数据量的情况(如人人网大量查询用户信息、好友信息、文章信息等)。
Redis: 适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统(如新浪微博的计数和微博发布部分系统,对数据安全性、读写要求都很高)。

三、Redis的数据回收策略

Redis的回收策略

volatile-lru: 从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰;
volatile-ttl: 从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰;
volatile-random: 从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰;
allkeys-lru: 从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰;
allkeys-random: 从数据集(server.db[i].dict)中任意选择数据淘汰;
no-enviction(驱逐): 禁止驱逐数据;

四、案例:搭建Redis高性能数据库

案例环境:

系统主机名IP地址软件
Centos 7.4redis.linuxfan.cn192.168.100.10redis-4.0.9.tar.gzphpredis-4.0.2.tar.gz

安装并配置Redis服务
上传源码包

[root@7-10 ~]# tar zxvf redis-4.0.9.tar.gz 
[root@7-10 ~]# cd redis-4.0.9
[root@7-10 redis-4.0.9]# make 
[root@7-10 redis-4.0.9]# echo $?
0
[root@7-10 redis-4.0.9]# cd
[root@7-10 ~]# mkdir -p /usr/local/redis
[root@7-10 ~]# cp /root/redis-4.0.9/src/redis-server            /usr/local/redis/       ##服务端程序
[root@7-10 ~]# cp /root/redis-4.0.9/src/redis-cli /usr/local/redis/	##客户端程序
[root@7-10 ~]# cp /root/redis-4.0.9/redis.conf /usr/local/redis/redis/	##主配置文件
[root@7-10 redis]# ls
redis-cli  redis.conf  redis-server
[root@7-10 redis]# cd
[root@7-10 ~]# sed -i '/^bind 127.0.0.1$/s/127.0.0.1/192.168.100.10/g' /usr/local/redis/redis.conf
[root@7-10 ~]# sed -i '/protected-mode/s/yes/no/g' /usr/local/redis/redis.conf	##关闭redis的保护模式
[root@7-10 ~]# sed -i '/daemonize/s/no/yes/g' /usr/local/redis/redis.conf 	##开启redis的后台守护进程模式
[root@7-10 ~]# sed -i '/requirepass/s/foobared/123123/g' /usr/local/redis/redis.conf	##设置redis的密码为123123
[root@7-10 ~]# sed -i '/requirepass 123123/s/^#//g' /usr/local/redis/redis.conf	##开启redis的密码
[root@7-10 ~]# vim /etc/init.d/redis
[root@7-10 ~]#  chmod 755 /etc/init.d/redis
[root@7-10 ~]#  chkconfig --add redis
[root@7-10 ~]# /etc/init.d/redis start
Starting Redis server...
5705:C 23 Jun 16:42:03.490 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
5705:C 23 Jun 16:42:03.491 # Redis version=4.0.9, bits=64, commit=00000000, modified=0, pid=5705, just started
5705:C 23 Jun 16:42:03.491 # Configuration loaded
Redis is running...
[root@7-10 ~]# netstat -utpln |grep redis
tcp        0      0 192.168.100.10:6379     0.0.0.0:*               LISTEN      5706/redis-server 1

调整Redis服务的配置:

[root@7-10 ~]# cp /root/redis-4.0.9/src/redis-benchmark /usr/local/redis/
[root@7-10 ~]# cp /root/redis-4.0.9/src/redis-check-rdb /usr/local/redis/
[root@7-10 ~]#  cp /root/redis-4.0.9/src/redis-check-aof /usr/local/redis/
[root@7-10 ~]# cp /root/redis-4.0.9/src/redis-sentinel /usr/local/redis/
[root@7-10 ~]# ls /usr/local/redis/
redis-benchmark  redis-check-rdb  redis.conf      redis-server
redis-check-aof  redis-cli        redis-sentinel
[root@7-10 ~]#  ln -s /usr/local/redis/redis-cli /usr/bin/redis
[root@7-10 ~]# redis -h 192.168.100.10 -p 6379 -a 123123
192.168.100.10:6379> set name lwh
OK
192.168.100.10:6379>  get name
"lwh"
192.168.100.10:6379> exit
[root@7-10 ~]# ln -s /usr/local/redis/redis-benchmark /usr/bin/redis-benchmark
[root@7-10 ~]# redis-benchmark -h 192.168.100.10 -p 6379 -c 1000 -n 10000

结合PHP测试Redis服务
上传php包

[root@7-10 ~]# mount /dev/cdrom /mnt
mount: /dev/sr0 写保护,将以只读方式挂载
[root@7-10 ~]# vim /etc/yum.
yum.conf     yum.repos.d/ 
[root@7-10 ~]# vim /etc/yum.repos.d/123.repo 
[root@7-10 ~]# yum -y install httpd php php-devel
[root@7-10 ~]# php -v
PHP 5.4.16 (cli) (built: Oct 30 2018 19:30:51) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
[root@7-10 ~]# tar zxvf phpredis-4.0.2.tar.gz
[root@7-10 ~]# cd phpredis-4.0.2
[root@7-10 phpredis-4.0.2]# /usr/bin/phpize 
Configuring for:
PHP Api Version:         20100412
Zend Module Api No:      20100525
Zend Extension Api No:   220100525
[root@7-10 phpredis-4.0.2]# ./configure --with-php-config=/usr/bin/php-config
[root@7-10 phpredis-4.0.2]# make && make install
[root@7-10 phpredis-4.0.2]# echo $?
0
[root@7-10 phpredis-4.0.2]# cd
[root@7-10 ~]# echo -e "extension_dir = \"/usr/lib64/php/modules/\"\nextension = redis.so" >>/etc/php.ini
[root@7-10 ~]# systemctl start httpd
[root@7-10 ~]# netstat -utpln |grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      46247/httpd         
[root@7-10 ~]# vim /var/www/html/index.php

在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值