晓夏

YoungCheung

Zhang Sir's technical way

NoSQL之Redis数据库

浏览量:754

一、redis简介

1.1 redis介绍

        RemoteDictionary Server是一个基于Key-value键值对的持久化数据库数据库存储系统,redismemcached缓存服务器很但是redis支持的数据存储类型更丰富,包括Stringlistsetzset

  这些数据类型都支持push/popadd/remove及取交集,并集和差集及更丰富的操作,而这些操作都是原子性的,在此基础上,redis支持各种不同方式的排序,memcached缓存服务一样,为了保证销量,数据都是缓存再内存中提供服务memcached不同的是redis持久化缓存服务器还会周期行的把更新的数据写入到磁盘以及把修改的操作记录追加到文件里记录下来,memcached更有优势的是redis还支持master-slave主从同步,这点累死关系型数据库mysql

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

redis官方文档如下:

http://www.redis.io/documentation

1.2 redis的优点

  性能很高:redis支持超过100K每秒的读取频率

  丰富数据类型,redis支持二进制的StringLisstHashesSetsOrdered Sets等数据类型操作

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

  丰富的特性:redis还支持publiss/subscribe通知key过期等等特性

  redis支持异机主从复制

1.3 redis 的数据类型

    Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

blob.png

1.4 redis应用场景


  传统Mysql+Memcached的网站架构遇到的问题

  Mysql数据实际上是适合进行海量数据存储的,加上通过Memcached将热点数据存放到内存cache里,达到加速数据访问的目的,绝大部份公司都曾经使用过这样的架构,但是随着业务数据量的不断增加,访问量的持续增长,很多问题就会暴露出来。

需要不断的对Mysql进行拆库拆表Memcached也需要不断跟着扩容,扩容和维护工作占据大量开发运维时间

memcachedMysql数据库数据导致一致性问题是个老大难

memcached数据命中率低活着宕机,导致大量访问直接穿透到数据库,导致mysql无法支撑访问。

跨机房cache同步一致性问题

 

redis的最佳场景

Rdis最佳食用场景的全部是数据in-memory

redis更多场景作为Memcached的替代品来使用

当需要除key/value之外的更多数据类型支持时,使用Redis更合适

存储的数据不能别提出时,使用Redis更合适

更多Redis作者谈Redis应用场景htt://blog.nosqlfam.com/html/2235.html

企业场景:

1、使用Redis bitmap进行活跃用户统计

http://blog.nosqlfan.com/html/3501.html


这里对Redis数据库做了如下小结:

提高DB可拓展性只需要将新数据放到新加的服务器上可以了

提高DB的可用性,只影响到需要访问的shard服务器上的数据的用户

提高DB的可维护性,系统的升级配置可以按shard个个来搞,服务产生的影响较小

小的数据库存的查询压力小,查询更快,性能更好

 

使用过程中的一些经验和教训,如下时小结

要进行Master-slave的配置,出现服务故障时可以支持切换

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

物理内存+虚拟内存不足,这个dump一致死时间久了机器挂掉,这个情况下就是灾难

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

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

redisDB同步写的问题,先写DB后写redis因为内存基本上没问题

二、redis部署安装

2.1 redis下载解压编译

$ wget http://download.redis.io/releases/redis-3.2.8.tar.gz
$ tar xzf redis-3.2.8.tar.gz
$ cd redis-3.2.8/src

注意:二进制文件是编译完成后在src目录下,通过下面的命令启动Redis服务:

$ src/redis-server

2.2 配置redis安装包

$ make MANIFESTO=jemalloc && make PREFIX=/usr/local/redis-3.0.8 install

2.3 创建软连接

$ ln -s /usr/local/redis-3.0.8 /usr/local/redis

2.4 配置语言环境

$  LANG=en_US.UTF-8

2.5 查看redis bin目录

[root@Master ~]# tree /usr/local/redis/bin/
/usr/local/redis/bin/
├── redis-benchmark
├── redis-check-aof
├── redis-check-rdb
├── redis-cli
├── redis-sentinel -> redis-server
└── redis-server

0 directories, 6 files

说明:

redis-server:Redis服务器的daemon启动程序

redis-cli :Redis命令行操作工具,当然也可以用telnet跟其纯文本协议来操作

redis-benchmark:Redis性能测试工具,测试Redis在你的系统及你的配置下的读写

redis-check-aof:动态切换redis持久方式,从 RDB 切换到 AOF


redis-check-dump:用语本地数据库的检查

三、配置并启动redis服务

3.1 配置环境变量

$  echo ' PATH=/usr/local/redis/bin/:$PATH' >> /etc/profile
$  source /etc/profile

3.2 创建并拷贝配置文件

$  mkdir /data/redis/conf -p
$  cp /usr/local/src/redis-3.2.8/redis.conf /data/redis/conf/

3.3 设置内置参数

$  sysctl vm.overcommit_memory=1

3.4 启动redis服务

$  redis-server -f /data/redis/conf/redis.conf &

查看启动状态

blob.png

3.5 关闭redis服务

$ redsi-cli shutdown
$ killall redis-server

四、测试redis服务

4.1 连接到redis

[root@Master ~]# redis-cli 
127.0.0.1:6379>

或者指定ip,password

redis-cli -h 127.0.0.1 -p 22 -a '123456'

详细操作:点击进入


神回复

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。