Redis介绍:
Redis是一个开源的key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
应用场景
配合关系型数据库做高速缓存
1)高频次,热门访问的数据(热点数据),降低数据库IO
2)分布式架构,做session共享
由于其拥有持久化能力,利用其多样的数据结构存储特定的数据
1)最新N个数据 =》通过List实现按自然时间排序的数据
2)排行榜 ,Top N =》利用zset(有序集合)
3)时效性的数据,比如手机验证码 =》 Expire 过期
4)计数器,秒杀 =》原子性,自增方法INCR、DECR
5)去除大量数据中的重复数据 =》 利用Set集合
6)构建队列 =》利用list集合
7)发布订阅消息系统 =》pub/sub模式
一、下载
二、解压
到主目录(解压目录)执行make,
问题:
1. gcc: Command not found
执行
yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake
yum -y install wget httpd-tools vim
2. jemalloc/jemalloc.h: No such file or directory
解决:
make MALLOC=libc
3.执行make test出现You need tcl 8.5 or newer in order to run the Redis test
顾名思义,这一步就是对上一步 make 的检查了,要确保 make 是没有错误的,也就是这一步的 test要全部是 OK 的,error 为0
yum install tcl
三、启动redis
cd src
./redis-server
这是前台启动,可以设置后台启动。
改成yes然后启动就可以了。
启动需要配置文件:
四、测试
ok, 成功
默认启动的Redis服务为用户服务,也就意味着,Redis会将启动信息打印在控制台窗口中,如果关闭这个窗口,redis服务也就关闭了。 如果将redis.conf文件里面的daemonize no 改成 yes,就可以让Redis服务在后台启动。
登入指定的命令行界面: ./redis-cli -h 192.168.71.170 -p 6379 -a password
默认16个数据库,类似数组下标从0开始,初始默认使用0号库
使用命令 select <dbid> 来切换数据库。如: select 8
统一密码管理,所有库都是同样密码,要么都OK要么一个也连接不上。
Redis是单线程+多路IO复用技术
多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用select和poll和epoll函数,传入多个文件描述符,如果有一个文件描述符就绪,则返回,否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启动线程执行(比如使用线程池)。
memcached和redis的比较
串行 vs 多线程+锁(memcached) vs 单线程+多路IO复用(Redis)
redis为什么这么快
1、它基于内存的。(虽然某些情况随机的内存读取不一定比有序的文件操作快,但是基本内存都是超快的。)
2、单线程(模型简单,不容易出错)加IO多路复用。
多个请求数据过来会在mapping中记录请求和文件描述符的对应关系(只处理有数据过来的那些请求),epoll函数会轮询请求,把数据返归给对应的请求。
多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用select和poll和epoll函数,传入多个文件描述符,如果有一个文件描述符就绪,则返回,否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启动线程执行(比如使用线程池)。
使用select以后最大的优势是用户可以在一个线程内同时处理多个socket的IO请求。用户可以注册多个socket,然后不断地调用select读取被激活的socket,即可达到在同一个线程内同时处理多个IO请求的目的。而在同步阻塞模型中,必须通过多线程的方式才能达到这个目的。