redis缓存详细叙述

什么是Redis缓存?

redis 是一个 开源的key-value存储系统 与 Memcachel类似都是菲关系型数据库(Nosql)
redis 将大部分数据存储在内存中

Redis-系统文件说明

    redis-server:redis 服务器的 daemon 启动程序;redis-cli 命令行操作工具。
    当然,你也可以用 telnet 根据其纯文本协议来操作;redis-benchmark性能测试工具,
    测试 redis 在你的系统及你的配置下的读写功能 redis-stat;状态检测工具,
   可以检测 redis 当前状态参数及延迟状况

数据类型

支持的数据类型包括:字符串、哈希表、链表、集合、有序集合以及基于这些数据类型的相关操作。2最为常用的数据类型主要由五种:String、Hash、List、Set 和 Sorted Set

类型 常用命令
String set/get/decr/incr/mget 等
Hash hget/hset/hgetall 等
List lpush/rpush/lpop/rpop/lrange 等
Set sadd/spop/smembers/sunion 等
Sorted Set zadd/zrange/zrem/zcard 等

Redis 数据类型-应用场景

String: 首先的话 string我们用在了短信验证码这一块 我们当时用户注册发送的验证码会存用到Redis的一个string类型,当用户返回给我们验证码时 和缓存里的进行比对 当验证码通过时 则删除缓存里的验证码 同时我们也用到了一个inrc的这个机制 它就是一个类似于计数器的一个机制 可以用来计算用户验证码是否过期 就是当用户点击获取验证码时记录一下时间 ,然后用 用户返回的验证码去减发送的时间 如果超过5分钟 或者1分钟 则验证码失效 当然 这个时间有我们自己设定 其实 这个inrc机制还可以用在网站的访问量,或者说视频的点击量上

( Hash)哈希: 哈希类型的话 他就是一个kv的键值对嘛 用来存储一下对象信息比较方便 我们当时项目里在使用微信登陆这块用的Redis的哈希类型 比如说我们在用户授权后 将用户的信息通过哈希方式存放在Redis里 当然数据库也要备份 但是你不可能每次访问都要去数据库对吧 这样对数据库也不太友好 所以我们在这个地方直接将用户数据存放在Redis里

(Set)有序 几个这块最多用的就是那个排行榜 我们那个项目里 就是 视频的播放量了 或者课程的排行榜这些 用的就是这个有序集合

( Sorted Set)有序集合 其实他就是一堆不重复的值的组合 可以利用这个特性可以将一个用户关注的课程存在一个集合中的

(List)队列 Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如twitter的关注列表,粉丝列表等都可以用Redis的list结构来实现。

List 就是链表,相信略有数据结构知识的人都应该能理解其结构。使用List结构,我们可以轻松地实现最新消息排行等功能。List的另一个应用就是消息队列,

使用redis有哪些好处?

(1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以redis具有快速和数据持久化的特征。如果不将数据放在内存中,磁盘I/O速度为严重影响redis的性能。
(2) 支持丰富数据类型,支持string,list,set,sorted set,hash
(3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
(4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
(5) redis利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销,所以它为单进程单线程

redis相比memcached有哪些优势

(1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型
(2) redis的速度比memcached快很多
很多开发者都认为 Redis 不可能比 Memcached 快, Memcached 完全基于内存,而Redis 具有持久化保存特性,即使是异步的,Redis 也不可能比Memcached 快。但是测试结果基本是Redis占绝对优势。一直在思考这个原因,目前想到的原因有这几方面。
Libevent 和Memcached 不同,Redis并没有选择Libevent 。Libevent 为了迎合通用性造成代码庞大(目前Redis代码还不到libevent的1/3)及牺牲了在特定平台的不少性能。Redis用libevent 中两个文件修改实现了自己的epoll event loop 。业界不少开发者也建议Redis使用另外一个libevent高性能替代libev,但是作者还是坚持Redis应该小巧并去依赖的思路。一个印象深刻的细节是编译Redis之前并不需要执行./configure 。
CAS 问题。CAS 是Memcached 中比较方便的一种防止竞争修改资源的方法。CAS 实现需要为每个cache key设置一个隐藏的cas token ,cas 相当value 版本号,每次set 会token 需要递增,因此带来CPU和内存的双重开销,虽然这些开销很小,但是到单机10G+ cache以及QPS 上万之后这些开销就会给双方相对带来一些细微性能差别。
(3) redis支持数据的备份,即master-slave模式的数据备份。
(4) redis支持数据的持久化。
(5) redis在很多方面支持数据库的特性,可以这样说他就是一个数据库系统,而memcached只是简单地K/V缓存。
(6) 它们在性能方面差别不是很大,读取方面尤其是针对批量读取性能方面memcached占据优势。当然redis也有他的优点,如持久性、支持更多的数据结构。
(7) 所以在选择方面如果有持久方面的需求或对数据类型和处理有要求的应该选择redis。
(8) 如果简单的key/value 存储应该选择memcached。

redis的持久化机制

Redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘里面来保证数据的持久化。Redis支持两种持久化的实现,snapshotting (rdb)的持久化机制(快照)、append-only file(缩写aof)的持久化机制,可以通过启动配置文件(redis.conf)进行指定,默认采用rdb

redis持久化的几种方式

1、快照(snapshots)

缺省情况情况下,Redis把数据快照存放在磁盘上的二进制文件中,文件名为dump.rdb。你可以配置Redis的持久化策略,例如数据集中每N秒钟有超过M次更新,就将数据写入磁盘;或者你可以手工调用命令SAVE或BGSAVE。
  工作原理
  . Redis forks.
  . 子进程开始将数据写到临时RDB文件中。
  . 当子进程完成写RDB文件,用新文件替换老文件。
  . 这种方式可以使Redis使用copy-on-write技术。

2、AOF

快照模式并不十分健壮,当系统停止,或者无意中Redis被kill掉,最后写入Redis的数据就会丢失。这对某些应用也许不是大问题,但对于要求高可靠性的应用来说,
  Redis就不是一个合适的选择。
  Append-only文件模式是另一种选择。
  你可以在配置文件中打开AOF模式

3、虚拟内存方式

当你的key很小而value很大时,使用VM的效果会比较好.因为这样节约的内存比较大.
  当你的key不小时,可以考虑使用一些非常方法将很大的key变成很大的value,比如你可以考虑将key,value组合成一个新的value.
  vm-max-threads这个参数,可以设置访问swap文件的线程数,设置最好不要超过机器的核数,如果设置为0,那么所有对swap文件的操作都是串行的.可能会造成比较长时间的延迟,但是对数据完整性有很好的保证.

redis主从复制

通过配置两台(或多台)数据库的主从关系,可以将一台数据库服务器的数据更新同步到另一台服务器上。 redis 支持 master-slave(主从)模式,redisserver 可以设置为另一个 redis server 的主机(从机),从机定期从主机拿数据。特殊的,一个从机同样可以设置为一个 redis server 的主机,master以写为主,slaver以读为主。
配置过程:
启动三台装有redis的centos
确定主从关系,将那两台作为从
用vim编辑从服务器的redis.conf(自己的启动配置文件)
检查从机是否能访问主机的6379端口
redis主从复制的特点
master可以有多台slave
除了多个slave连到相同master外,slave也可以连接到其它slave形成图状结构
主从复制不会阻塞master,也就是说当一个或多个slave与master连接进行复制时,master可以继续处理客户端发来的请求
主从复制可以用来提高系统的伸缩性,我们可以用多个slave专门负责客户端的读请求,可以做数据冗余

redis哨兵机制

有了主从复制的实现以后,如果我们想对主从服务器进行监控,那么在redis2.6以后提供了一个"哨兵"的机制。在2.6版本中的哨兵为1.0版本,并不稳定,会出现各种各样的问题,在2.8版本以后的哨兵功能才稳定起来。
顾名思义,哨兵的含义就是监控Redis系统的运行状态。可以启动多个哨兵,去监控Redis数据库的运行状态。
其主要功能有两点
监控主数据库和从数据库是否正常运行。
主数据库出现故障时,可以自动将从数据库转换为主数据库,实现自动切换。

哨兵机制的实现步骤
	在其中的一个slave配置哨兵(也可以配置在主服务器)
注意:因为原来的slave1、slave2会被自动选举为主服务器所以在它的配置文件中要配置(#bind127.0.0.1 protected-mode no 以及开放6379端口),最好使用telnet +ip + 端口 测试一下。
		copy 文件/usr/local/redis/redis-4.0.8/sentinel.conf(自己的redis的sentinel.conf文件) 到 /usr/local/redis/etc路径中命令 cp  /usr/local/redis/redis-4.0.8/sentinel.conf  /usr/local/redis/etc/
		修改 sentinel.conf 文件  vim/usr/local/redis/etc/sentinel.conf
			dir "/usr/local/redis/etc"    数据存放目录
			protected-mode no    关闭保护模式
			sentinel monitor mymaster192.168.43.201 6379 1    格式是master 的名称、 ip 、地址、端口号,以及失败时选出master的投票数量
			sentineldown-after-milliseconds mymaster5000    超时5000毫秒为宕机
			sentinelparallel-syncsmymaster 2     从服务器的个数

1 .当启动哨兵模式之后,如果你的master服务器宕机之后,哨兵自动会在从redis服务器里面 投票选举一个master主服务器出来;这个主服务器也可以进行读写操作!
2 .如果之前宕机的主服务器已经修好,可以正式运行了。那么这个服务器只能进行读的操作,会自动跟随由哨兵选举出来的新服务器!

好了介绍到这 差不多了!详细了解 点击链接
https://learnku.com/blog/A_aliane大神级别

你可能感兴趣的:(Redis)