redis数据库
关系型数据库与非关系型数据库关系型数据库:一个机构化的数据库,创建在关系模型基础上,一般面向于记录包括oracle,mysql,sqlserver,db2非关系型数据库:除了主流的关系型数据库意外的数据库,都人为是非关系型的包括redis,mongdb,hbase,couhdb非关系型数据库产生背景对数据库高并发读写需求对海量数据高效存储与访问需求对数据库高可扩展性与高可用需求Redis简介Redis基于内存运行并支持持久化采用key-value(键值对)的存储形式优点:具有极高的数据读写速度支持丰富的数据类型支持数据的持久化原子性支持数据备份1,安装必要的环境组件,并安装redis# yum install gcc gcc-c++ make -y##安装环境组件# mount.cifs //192.168.100.3/LNMP-C7 /mnt/##挂载Password for root@//192.168.100.3/LNMP-C7:# cd /mnt/# tar zxvf redis-5.0.7.tar.gz -C /opt/##解压# cd /opt/redis-5.0.7/# make##编译# make PREFIX=/usr/local/redis/ install##安装2,执行配置Redis配置文件脚本,并进行配置# cd utils/# ./install_server.sh ##执行脚本进行配置Welcome to the redis service installerThis script will help you easily set up a running redis serverPlease select the redis port for this instance: ##默认端口Selecting default: 6379Please select the redis config file name ##配置文件Selected default - /etc/redis/6379.confPlease select the redis log file name ##日志文件Selected default - /var/log/redis_6379.logPlease select the data directory for this instance ##数据文件Selected default - /var/lib/redis/6379Please select the redis executable path [] /usr/local/redis/bin/redis-server##可执行文件路径# ln -s /usr/local/redis/bin/* /usr/local/bin/ ##便于系统识别# netstat -ntap | grep 6379tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 44510/redis-server# /etc/init.d/redis_6379 stop##关闭redisStopping ...Redis stopped# /etc/init.d/redis_6379 start##开启redisStarting Redis server...# vim /etc/redis/6379.conf ##修改配置文件bind 127.0.0.1 192.168.13.128##设置监听地址# /etc/init.d/redis_6379 restart##重启redis服务Stopping ...Redis stoppedStarting Redis server...# redis-cli -h 192.168.13.128 -p 6379 ##登录redis192.168.13.128:6379> help set##help帮助 SET key value summary: Set the string value of a key since: 1.0.0 group: string192.168.13.128:6379> set teacher zhangsan ##设置键值对OK192.168.13.128:6379> set tea redOK192.168.13.128:6379> KEYS * ##查看所有的键1) "teacher"2) "tea"192.168.13.128:6379> keys t??##查看键是t开头后面是两个字符的1) "tea"192.168.13.128:6379> get tea ##查看键的值"red"192.168.13.128:6379> EXISTS tea##查看键是否存在(integer) 1 ##1是存在,0是不存在192.168.13.128:6379> EXISTS teas(integer) 0192.168.13.128:6379> del teacher##删除键(integer) 1192.168.13.128:6379> KEYS *1) "tea"192.168.13.128:6379> type tea ##查看键的类型string192.168.13.128:6379> rename tea t1 ##给键重命名OK192.168.13.128:6379> keys *1) "t1"192.168.13.128:6379> get t1"red"192.168.13.128:6379> exit ##退出3,进行压测# redis-benchmark -h 192.168.13.128 -p 6379 -c 100 -n 100000##并发100,100000个请求====== SET ====== 100000 requests completed in 1.14 seconds ##请求花费的时间 100 parallel clients 3 bytes payload keep alive: 184.66% <= 1 milliseconds98.48% <= 2 milliseconds99.69% <= 3 milliseconds99.90% <= 18 milliseconds100.00% <= 18 milliseconds87642.41 requests per second====== GET ====== 100000 requests completed in 1.13 seconds 100 parallel clients 3 bytes payload keep alive: 1 # redis-benchmark -h 192.168.13.128 -p 6379 -q -d 100 ##以字节形式指定set/get值的数据大小 SET: 90497.73 requests per second GET: 90991.81 requests per second4,移动键值对到其他的库中(一共16个库)# redis-cli -h 192.168.13.128 -p 6379 ##进入Redis 192.168.13.128:6379> select 10##进入第11个库OK192.168.13.128:6379> keys *(empty list or set)192.168.13.128:6379> select 0##进入第1个库OK192.168.13.128:6379> move t1 10##移动键值对到第11个库(integer) 1192.168.13.128:6379> select 10##进入第11个库OK192.168.13.128:6379> keys * ## 查看键1) "t1"192.168.13.128:6379> get t1"red"192.168.13.128:6379> flushdb##清除库中数据OK192.168.13.128:6379> keys * ##查看所有键(empty list or set)192.168.13.128:6379> select 0 ##切换到第一个库OK192.168.13.128:6379> keys * ##查看所有的键1) "myset:__rand_int__"2) "mylist"3) "key:__rand_int__"4) "counter:__rand_int__"192.168.13.128:6379>Redis持久化Redis是运行在内存中,内存中的数据断电丢失为了能后重用Redis数据,或者防止系统故障,我们需要将Redis中的数据写入到磁盘空间中,即持久化持久化分类RDB方式:创建快照的方式获取某一时刻Redis中所有数据的副本AOF方式:将执行的写命令写到文件的末尾,以日志的方式来记录数据的变化RDB持久化Redis的默认持久化方式默认文件名dump.rdb触发条件:在指定的时间间隔内,执行指定次数的写操作(配置文件控制)执行save或者是bgsave(异步)命令执行flushall命令,清空数据库所有数据执行shutdown命令,保证服务器正常关闭且不丢失任何数据优缺点:适合大规模的数据恢复如果业务对数据完整性和一致性要求不高,RDB是很好的选择数据的完整性和一致性不高备份时占用内存通过RDB文件恢复数据将dump.rdb文件拷贝到redis的安装目录的bin目录下,重启redis服务即可配置RDB持久化# vim /etc/redis/6379.conf #900秒之内至少一次写操作save 900 1#300秒之内至少发生10次写操作save 300 10#60秒之内发生至少10000次写操作save 60 10000#只要满足其一都会触发快照操作,注释所有的save项表示关闭RDB#RDB文件名称dbfilename dump.rdb#RDB文件路径dir /var/lib/redis/6379#开启压缩功能rdbcompression yesAOF持久化Redis默认不开启弥补RDB的不足(数据的不一致性)采用日志的形式来记录每个写操作,并追加到文件中Redis重启会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作根据AOF文件恢复数据将appendonly.aof文件拷贝到redis安装目录的bin目录下,重启redis服务即可AOF持久化配置# vim /etc/redis/6379.conf #开启AOF持久化appendonly yes#AOF文件名称appendfilename "appendonly.aof"#always:同步持久化,每次发生数据变化会立刻写入磁盘#appendfsync always#everysec:默认推荐,每秒异步记录次(默认值)appendfsync everysec#no:不同步,交给操作系统决定如何同步#appendfsync no#忽略最后一条可能存在问题的指令aof-load-truncated yesAOF的重写机制AOF的工作原理是将写操作追加到文件中,文件的冗余内容会越来越多当AOF文件的大小超过所设定的阀值时,Redis就会对AOF文件的内容压缩AOF重写的原理Redis会fork出一条新进程,读取内存中的数据(并没有读取旧文件),并重新写到一个临时文件中,最后替换旧的aof文件AOF重写配置# vim /etc/redis/6379.conf #在日志进行BGREWRITEAOF时, 如果设置为yes表示新写操作不进行同步fsync,#只暂存在缓冲区里,避免造成磁盘I0操作冲突,等重写完成后在写入。redis中默认为nono-appendfsync-on-rewrite no#当前AOF文件大小是上次日志重写时AOF文件大小两倍时,发生BGREWRITEAOF操作auto-aof-rewrite-percentage 100#当前AOF文件执行BGREWRITEAOF命令的最小值,#避免刚开始启动Reids时由于文件尺寸较小导致频繁的BGREWRITEAOFauto-aof-rewrite-min-size 64mbRedis性能管理##查看redis内存使用# /usr/local/redis/bin/redis-cli127.0.0.1:6379> info memory内存碎片率●操系统分配的内存值used_ _memory_ _rss除以redis使用的内存值used_ _memory计算得出●内存碎片是由操作系统低效的分配/回收物理内存导致的不连续的物理内存分配●跟踪内存碎片率对理解redis实例的资源性能是非常重要的内存碎片率稍大于1是合理的,这个值表示内存碎片率比较低内存碎片率超过1.5,说明redis消耗了实际需要物理内存的150%,其中50%是内存碎片率内存碎片率低于1的,说明Redis内存分配超出了物理内存,操作系统正在进行内存交换内存使用率●redis实例的内存使用率超过可用最大内存,操作系统将开始进行内存与swap空间交换●避免内存交换针对缓存数据大小选择尽可能的使用Hash数据结构设置key的过期时间回收key●保证合理分配redis有限的内存资源●当内存使用达到设置的最大阀值时,需要选择一种key的回收策略默认情况下回收策略是禁止删除redis.conf配置文件中修改maxmemory-policy属性值- volatile-lru:使用LRU算法从已设置过期时间的数据集合中淘汰数据- volatile-ttl:从已设置过期时间的数据集合中挑选即将过期的数据淘汰(建议使用)- volatile-random:从已设置过期时间的数据集合中随机挑选数据淘汰- allkeys-lru:使用LRU算法从所有数据集合中淘汰数据- allkeys-random:从数据集合中任意选择数据淘汰- no-enviction:禁止淘汰数据谢谢阅读
页:
[1]