Fork me on GitHub
moyuanhui
牛嗷嗷

Redis应用及安装

Redis听到最多的一句话就是Redis的使用难吗?不难,Redis用好容易吗?不容易,有时候觉得这句话说的挺好,但又是让读者挺心里咯噔一下的,还不如不说!

概述简介

Redis是一个开源(BSD许可)的内存数据结构存储,用作数据库,缓存和消息代理。它支持数据结构,如字符串,哈希,列表,集合,具有范围查询的排序集,位图,超级日志和具有半径查询的地理空间索引。Redis具有内置复制,Lua脚本,LRU逐出,交易和不同级别的磁盘持久性,并通过Redis Sentinel提供高可用性,并通过Redis Cluster自动分区。
往简单的说就是:Redis是一个开源的Key-Value存储,它具有以下特点:

  • 速度非常快(每个人都知道)
  • 丰富的数据结构,包括String,List,Hash,Set,Sorted Set等
  • 单线程,免了线程切换和锁的性能消耗(搞不懂,整天研究的并发编程在这里不适用?)
  • 原子操作(作为数据库都有)
  • 可持久化(RDB与AOF)
  • 发布/订阅 (个人认为RabbitMQ这方面比较优越,在微服务RPC调用这里,作服务的发现)
  • 支持Lua脚本
  • 分布式锁 (集群的关键)
  • 事务 (作为数据库都有)
  • 主从复制与高可用(Redis Sentinel)
  • 集群(3.0版本以上)

Redis数据结构

建议直接看Redis官网的数据结构,因为从来不想看二手Redis数据结构,这里简单介绍:

  • String
    这是最简单的Redis类型。如果只使用这种类型,Redis就像一个可持久化的Memcached服务器。
  • List
    Redis的List是基于双向链表实现的,可以支持反向查找和遍历。
    常用案例:聊天系统、社交网络中获取用户最新发表的帖子、简单的消息队列、新闻的分页列表、博客的评论系统。
  • Hash
    Hash是一个String类型的field和value之间的映射表,请见下图,类似于.NET中的Hashtable和Dictionary。主要用来存储对象,可以避免序列化的开销和并发修改控制的问题。
  • Set
    Set也是一个列表,不过它的特殊之处在于它是可以自动排重的:当需要存储一个列表数据,而又不希望出现重复的时候,Set是一个很好的选择(比如ID的集合)。并且Set提供了判断某个成员是否在一个Set集合内的接口,这也是List所没有的。
  • Sorted Set
    Sorted Set和Set的使用场景类似,区别是Sorted Set会根据提供的score参数来进行自动排序。当你需要一个有序的并且不重复的集合列表,那么就可以选择Sorted Set数据结构。常用案例:游戏中的排行榜。

Redis重要特性

  • 管道
    Redis服务是一种C/S模型,提供请求-响应式协议的TCP服务,所以当客户端请求发出,服务端处理并返回结果到客户端,一般是以阻塞形式等待服务端的响应,但这在批量处理连接时延迟问题比较严重,所以Redis为了提升或弥补这个问题,引入了管道技术:可以做到服务端未及时响应的时候,客户端也可以继续发送命令请求,做到客户端和服务端互不干涉影响,服务端并最终返回所有服务端的响应,这在促进原有C/S模型交互的响应速度上有了质的提高。
    特点:在C/S交互中,客户端可发送任意数请求命令,不需要等服务端响应后再行发送请求;而服务端可以一次性完成并返回所有客户端请求结果,也可以分批次返回请求结果,这主要看服务端处理结果的速度而定。
  • 事务
    Redis事务是一组命令的集合。一个事务中的命令要么都执行,要么都不执行。如果命令在运行期间出现错误,不会自动回滚。
    管道与事务的区别:管道主要是网络上的优化,客户端缓冲一组命令,一次性发送到服务器端执行,但是并不能保证命令是在同一个事务里面执行;而事务是原子性的,可以确保命令执行的时候不会有来自其他客户端的命令插入到命令序列中。

常见应用问题

  • 缓存穿透处理
    什么是缓存穿透?当根据Redis key在缓存中查询后,不存在对应Value,就应该会在后端系统如DB中去查找,该Key的并发请求量一旦变大,那么就会对DB造成很大的压力。解决办法有:a.前端风险控制,将恶意穿透情况排除在外;b.对查询结果为空的情况依然进行缓存,但缓存时间会设置得很短,一般是几分钟。
  • 缓存雪崩处理
    什么是缓存雪崩?当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统(比如DB)带来很大压力。解决办法有:后端连接数限制,错误阈值限制,超时处理,缓存失效时间均匀分布,前端永不失效及后端主动更新。
  • 缓存时长
    策略定位复杂,需要多维度的计算。
  • 缓存失效
    按时失效,事件失效,后端主动更新。
  • 缓存Key
    Hash、规则、前缀+Hash,异常情况可人工干预。
  • Lua脚本
    服务端批量处理及事务能力,有条件逻辑的可扩展脚本。使用它的好处有:减少网络开销、原子操作、可复用。
  • Limit
    可滑动时间窗口,如应用于Session,Memcached需每次传Key和Value。

Redis简单介绍安装(Centos)

下载地址,建议生产环境使用稳定版
1、 确保已经安装有编译工具make

没有安装make可以使用:

yum install make -y

2、开始安装
RedisDesktopManage:页面效果:

RedisDesktopManage下载地址:https://redisdesktop.com/
Redis官网:https://redis.io/
Redis安装推荐博客:http://blog.csdn.net/lc1010078424/article/details/78295482
很多其它博客写的是真的垃圾!

posted @ 2018-02-01 15:25  牛嗷嗷  阅读(289)  评论(1编辑  收藏  举报