Redis使用简介

 

作者简介: 黄神齐,现就职于北京海天起点,负责大数据平台搭建及业务处理,擅长业务分析、数据挖掘与清洗及数据可视化的技术研究。

Redis简介

Redis是开源免费的、基于内存的、高性能的 Key-Value 数据库;支持存储的 value 类型 string、 list、hash、 set、zset、 streams(最新版特性)。Redis与 memcached 一样,为了保证效率,数据都是缓存在内存中。区别的是 Redis 会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

特性

速度快: c语言实现,所有数据存储在内存中;最高读取速度为11万/秒, 最高写的速度是8万/秒 。

持久化: 保存在内存的同时,会把数据同步更新到磁盘上;

丰富的数据结构: 支持String, List, Set, Hash, Zset, Streams;

支持多种语言:c/c++, java, php, python, ruby , lua, nodejs等

功能丰富: 除了支持六种数据结构之外,还支持事务、流水线、发布/订阅、消息队列等功能;

源码简单: 约23000行C语言源代码;

主从复制: 主服务器(master)执行添加、修改、删除,从服务器执行查询;

一致性: 单节点原生确保一致性;

Redis与其他key-value存储有什么不同?

Redis的数据类型都是基于基本数据结构的对与码农来说上手简单,Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。

Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

Redis安装与使用

  1. 下载 https://redis.io/download 一般选择为稳定版本
  2. 解压到指定目录


    安装redis中make失败的解决方案

    • 首先确保root登录,如果是$标识则表示是普通用户登录,#表示是root用户,切换成root用户命令输入su,回车,输入密码回车即可,然后进行安装 安装命令:
    • 安装完之后 如果make test出现错误提示需要tcl>8.4 只需要安装tcl即可
  3. 启动redis服务器   


    单节点redis安装成功(默认配置)     
  4. 根据redis.conf的配置启动redis   

    redis.conf 是一个默认的配置文件。我们可以根据需要使用自己的配置文件。
  5. 启动redis客户端       

  6. Windows安装 redis
    redis-desktop-manager-0.9.3.817 安装下一步即可

使用场景

取TOP N的业务,例如排行榜

例如电商中的商品购买次数或者博客文字、视频获得转发、点赞的次数,这时候就需要使用sorted set (有序集合),将我们需要排序的值设为sorted set的score同时将具体的数据设为对应value即可

计数器业务

redis的命令的是原子性的,计数器就是利用了redis原子性的自增操作,当某个操作发生时,向redis发送一个INCR命令,例如计算某个用户的点击量时,将用户的标识设为key (set xiaowang20181109 1) 当再次点击的时候发送 INCR xiaowang20181109命令,获取点击量 get xiaowang20181109。也可在结合DECR拓展业务

缓存

支持value类型丰富,Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、 list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步,当前 Redis的应用已经非常广泛,国内像新浪、淘宝,国外像 Flickr、Github等均在使用Redis的缓存服务

发布订阅

redis的发布和订阅的使用场景非常多例如聊天室

常见的坑

缓存击穿问题

缓存击穿是指一些恶意用户模拟一些请求访问缓存中不存在的数据,由于缓存中都没有,导致这些请求短时间内直接落在了数据库上,导致数据库异常。好在数据库是主从结构,同时也有进行接口限流。

缓存和数据库间数据一致性问题

单机redis不存在这个问题,因为当前文章介绍单机版redis,故在这不进行讨论

缓存雪崩问题

缓存中的数据在同一时间内出现大范围的失效,一批新请求在缓存中拿不到数据去数据库中获取,瞬间导致数据库连接异常,如果服务器资源比较充足的情况先,建立缓存备份机制,同时存在两份缓存A和B A缓存为主缓存设置失效时间、B缓存为备份缓存不设置失效时间,如果A缓存中失效则去B缓存中获取,同时更新A缓存。如果服务器资源一般,那么延长缓存的过期时间,并在业务层次再做详细区分。

5.0最新特性—Streams

Redis 5.0 全新的数据类型:streams,官方把它定义为:以更抽象的方式建模日志的数据结构。Redis的streams主要是一个append only的数据结构,至少在概念上它是一种在内存中表示的抽象数据类型,只不过它们实现了更强大的操作,以克服日志文件本身的限制。

如果你了解MQ,那么可以把streams当做MQ。如果你还了解kafka,那么甚至可以把streams当做kafka。

另外,这个功能有点类似于redis以前的Pub/Sub,但是也有基本的不同:streams支持多个客户端(消费者)等待数据(Linux环境开多个窗口执行XREAD即可模拟),并且每个客户端得到的是完全相同的数据。

Pub/Sub是发送忘记的方式,并且不存储任何数据;而streams模式下,所有消息被无限期追加在streams中,除非用于显示执行删除(XDEL)。

streams的Consumer Groups也是Pub/Sub无法实现的控制方式。

Stream的消费模型借鉴了kafka的消费分组的概念,它弥补了Redis Pub/Sub不能持久化消息的缺陷。但是它又不同于kafka,kafka的消息可以分partition,而Stream不行。如果非要分parition的话,得在客户端做,提供不同的Stream名称,对消息进行hash取模来选择往哪个Stream里塞。

未经允许不得转载:Oracle一体机用户组 » Redis使用简介

相关推荐