redis高性能数据库

redis高性能数据库

经常用Redis做什么

在公司中经常用Redis来做数据库的缓存,用来缓存一些经常被客户端访问到的数据,从而减轻后端数据的压力

常见的缓存数据库有哪些

Redis memcache

相同点:1.都是缓存数据(内存) 2.都是以key-value的形式存储Name=dgf

不同点:redis支持数据的持久化(存在内存中的数据不会随着系统或服务的重启而丢失),Redis支持value的数据类型相对较多

memcache比Redis支持的value的数据类型较少,memcache不支持持久化

一丶Redis概述:

概述:redis是一个可持久化的单进程单线程key-value类型高速内存缓存系统,和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(列表)、set(集合)、zset(sortedset --有序集合)和hashs(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集更丰富的操作

与memcached一样,为了保证效率,数据都是缓存在内存中,区别的是Redis会定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过10万次读写操作,是已知心更难最快的key-value db,并且再次基础上实现了master-slave(主从)同步,当前Redis的应用已经非常广泛,国内像新浪,淘宝,国外像Flickr,GitHub都在使用Redis的缓存服务。官网地址:https://redis.io/,目前由Redis项目的开发和维护由vmware厂商负责提供支持;

优点:

1.性能极高--Redis能支持通过100k+每秒的读写频率

2.丰富的数据类型-Redis迟滞二进制案例的strings,lists,hashes,sets及ordered sets 数据类型操作

3.原子性-redis的所有的操作都是原子性(既所有操作要么成功要么失败不执行),同时Redis还支持对几个操作全并后的原子性执行。

4.redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们不需要进行随机访问。

二丶应用场景分析:

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

1.MySQL需要不断进行拆库拆表,Memcached也需不断跟着扩容,扩容和维护工作占据大量开发时间。

2.Memcached与MySQL数据库数据一致性问题。

3.Memcached数据命中率低或down机,大量访问直接穿透到DB,MySQL无法支持。

4.跨机房cache同步问题。

Redis的应用场景:

redis更像一个加强版的Memcached,那么何时使用Memcached,何时使用Redis呢?

1.redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

2.Redis支持数据的备份,即master-salve模式的数据备份

3.Redis支持数据的持久化,可以将内存中二段数据保持在磁盘中,重启的时候可以再次加载进行使用。

4.Memcached:动态系统中减轻数据库负载,提升性能;做缓存,适合多读少写,大数据量的情况(如人人网大量查询用户信息,好友信息,文章信息等)。

redis:适用于对读写效率要求很高,数据处理业务负载和对安全性要求较高的系统(如新浪微博的计数和微博发布部分系统,对数据安全性,读写要求都很高)。

三丶redis的数据回收策略:

Redis的回收策略: 用的LRU算法

volatile-lru: 从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰:

Set name dgf 10;

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-emviciton(驱逐):禁止驱逐数据

四丶搭建redis

1.安装Redis

 这里使用的是redis-6.2.6版本

[root@C7--07 ~]# tar zxvf redis-6.2.6.tar.gz                                      

[root@C7--07 ~]# cd redis-6.2.6                                 

[root@C7--07 redis-6.2.6]# make                             

[root@C7--07 redis-6.2.6]# echo $?                         

[root@C7--07 redis-6.2.6]# cd                               

[root@C7--07 ~]# mkdir -p /usr/local/redis                                 

[root@C7--07 ~]# cp /root/redis-6.2.6/src/redis-server /usr/local/redis/        #服务端程序

[root@C7--07 ~]# cp /root/redis-6.2.6/src/redis-cli /usr/local/redis/           #客户端程序

[root@C7--07 ~]# cp /root/redis-6.2.6/redis.conf /usr/local/redis/              #主配置文件

[root@C7--07 ~]# ls /usr/local/redis/

redis-cli  redis.conf  redis-server

 

[root@C7--07 ~]# sed -i '/^bind/s/bind .*/bind 192.168.10.209/g' /usr/local/redis/redis.conf   #修改为本机地址

[root@C7--07 ~]# sed -i '/protected-mode/s/yes/no/g' /usr/local/redis/redis.conf            #关闭redis的保护模式

[root@C7--07 ~]# sed -i '/daemonize/s/no/yes/g' /usr/local/redis/redis.conf                 #开启redis的后台守护进程模式

[root@C7--07 ~]# sed -i '/requirepass/s/foobared/123.com/g' /usr/local/redis/redis.conf     #设置redis的密码为123.com

[root@C7--07 ~]# sed -i '/requirepass 123.com/s/^#//g' /usr/local/redis/redis.conf          #开启redis的密码

编写启动停止redis脚本

 

[root@C7--07 ~]# cat <<END >>/etc/init.d/redis

#!/bin/sh
# chkconfig: 2345 80 90
# description: Start and Stop redis
#PATH=/usr/local/bin:/sbin:/usr/bin:/bin
REDISPORT=6379
EXEC=/usr/local/redis/redis-server
REDIS_CLI=/usr/local/redis/redis-cli
PIDFILE=/var/run/redis_6379.pid
CONF="/usr/local/redis/redis.conf"
AUTH="123.com"
LISTEN_IP=$(netstat -utpln |grep redis-server |awk '{print $4}'|awk -F':' '{print $1}' |uniq)
 
case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF
        fi
        if [ "$?"="0" ]
        then
              echo "Redis is running..."
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $REDIS_CLI -h $LISTEN_IP -p $REDISPORT -a $AUTH SHUTDOWN &>>/dev/null
                while [ -x ${PIDFILE} ]
               do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
   restart|force-reload)
        ${0} stop
        ${0} start
        ;;
  *)
    echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
        exit 1
esac

END

赋权、启动

 

[root@C7--07 ~]# chmod 755 /etc/init.d/redis                                 

[root@C7--07 ~]# chkconfig --add redis                             

[root@C7--07 ~]# /etc/init.d/redis start                              

Starting Redis server...

Redis is running...

 

[root@C7--07 ~]# netstat -autpln |grep redis                           

tcp        0      0 192.168.10.209:6379        0.0.0.0:*       LISTEN      89272/redis-server

 

调整Redis服务

 

[root@C7--07 ~]# cp /root/redis-6.2.6/src/{redis-benchmark,redis-check-rdb,redis-check-aof,redis-sentinel} /usr/local/redis/                                               

[root@C7--07 ~]# ls /usr/local/redis/                                             

redis-benchmark  redis-check-rdb  redis.conf  redis-server  redis-check-aof  redis-cli        redis-sentinel

 

[root@C7--07 ~]# ln -s /usr/local/redis/redis-cli /usr/bin/redis                                

[root@C7--07 ~]# redis -h 192.168.10.209 -p 6379 -a 123.com

Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.

192.168.10.209:6379> exit

到这里redis已经安装完成

结合php测试redis

[root@localhost redis-6.2.6]# yum -y install httpd php php-devel

已加载插件:fastestmirror

Loading mirror speeds from cached hostfile

软件包 httpd-2.4.6-67.el7.centos.x86_64 已安装并且是最新版本

软件包 php-5.4.16-42.el7.x86_64 已安装并且是最新版本

没有可用软件包 php-devel。

无须任何处理

[root@localhost redis-6.2.6]# php -v

PHP 5.4.16 (cli) (built: Nov  6 2016 00:29:02)

Copyright (c) 1997-2013 The PHP Group

Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

[root@localhost ~]# tar zxvf phpredis-4.0.2.tar.gz

[root@localhost ~]# vim /etc/yum.repos.d/linux.repo

[linux]

name=linux

baseurl=file:///mnt/

enabled=1

gpgcheck=0



[php]

name=php

baseurl=file:///root/php

enabled=1

gpgcheck=0

[root@localhost ~]# yum -y install httpd php php-devel

[root@localhost ~]# cd phpredis-4.0.2

[root@localhost phpredis-4.0.2]# /usr/bin/phpize

[root@localhost phpredis-4.0.2]# ./configure --with-php-conf=/usr/bin/php-config

[root@localhost phpredis-4.0.2]#make && make install

[root@localhost phpredis-4.0.2]# echo -e "extension_dir = \"/usr/lib64/php/modules/\"\nextension = redis/so" >> /etc/php.ini

[root@localhost phpredis-4.0.2]# systemctl start httpd

[root@localhost phpredis-4.0.2]# netstat -utpln |grep 80

tcp6       0      0 :::80                   :::*                    LISTEN      21507/httpd  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值