Redis学习笔记(一、Redis介绍)

技术支持:Linux基本命令、常用数据结构、Java

Redis简介

Redis是一种开源、基于键值对的存储服务系统,是高性能Key-Value服务器,支持多种数据结构,有丰富的功能,高可用分布式支持。

Redis的键值可以包括字符串(string)类型,同时它还包括哈希(hash)、列表(list)、集合(set)和 有序集合(sorted set)等数据类型。 对于这些数据类型,你可以执行原子操作。例如:对字符串进行附加操作(append);递增哈希中的值;向列表中增加元素;计算集合的交集、并集与差集等。

为了获得优异的性能,Redis采用了内存中(in-memory)数据集(dataset)的方式。同时,Redis支持数据的持久化,你可以每隔一段时间将数据集转存到磁盘上(snapshot),或者在日志尾部追加每一条操作命令(append only file,aof)。

Redis同样支持主从复制(master-slave replication),并且具有非常快速的非阻塞首次同步( non-blocking first synchronization)、网络断开自动重连等功能。同时Redis还具有其它一些特性,其中包括简单的事物支持、发布订阅 ( pub/sub)、管道(pipeline)和虚拟内存(vm)等 。

Redis具有丰富的客户端,支持现阶段流行的大多数编程语言。

特点总结如下:

速度快:10w OPS(数据存在内存中,C实现)

Redis学习笔记(一、Redis介绍)_第1张图片

持久化将所有数据保存在内存中,对数据的更新将异步得保存在磁盘上

多种数据结构:BitMaps(位图);HyperLogLog(超小内存唯一值计数,12K);GEO(地理信息定位,Redis3.2版本)

多种客户端语言:Java、PHP、Python、Ruby、Lua、node.js

功能丰富:发布订阅、Lua脚本、事务、pipeline(提高客户端的并发效率)

简单:23000 lines of code;不依赖外部库;单线程模型

主从复制:从库复制主库

高可用:Redis-Sentinel(v2.8)支持高可用

分布式:Redis-Cluster(v3.0)支持分布式

 

典型应用场景

缓存系统、计数器、消息队列系统、排行榜、社交网络、实时系统

 

为什么使用Redis

在项目中使用redis,主要是从两个角度去考虑:性能和并发。当然,redis还具备可以做分布式锁等其他功能,但是如果只是为了分布式锁这些其他功能,完全还有其他中间件(如zookpeer等)代替,并不是非要使用redis。因此,这个问题主要从性能和并发两个角度去答。

1、性能

如下图所示,我们在碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存。这样,后面的请求就去缓存中读取,使得请求能够迅速响应。

Redis学习笔记(一、Redis介绍)_第2张图片

2、并发

在大并发的情况下,所有的请求直接访问数据库,数据库会出现连接异常。这个时候,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问数据库。

 

PS:借鉴此篇博客https://blog.csdn.net/hjm4702192/article/details/80518856

 

Redis支持的数据类型

Redis一共支持五种数据类:string(字符串),Hash Tables(哈希),Linked Lists(列表),Set(集合)和zset(sorted set有序集合)。

Redis学习笔记(一、Redis介绍)_第3张图片

string(字符串):是Redis的最基本的数据类型,一个键对应一个值,需要注意是一个键值最大存储512MB。

使用场景:最常规的set/get操作,value可以是String也可以是数字。一般做一些复杂的计数功能的缓存。

Redis学习笔记(一、Redis介绍)_第4张图片

 hash(哈希):redis hash是一个键值对的集合,是一个string类型的field和value的映射表,适合用于存储对象

使用场景:这里value存放的是结构化的对象,比较方便的就是操作其中的某个字段。在做单点登录的时候,就是用这种数据结构存储用户信息,以cookieId作为key,设置30分钟为缓存过期时间,能很好的模拟出类似session的效果。

Redis学习笔记(一、Redis介绍)_第5张图片

list(列表):是redis简单的字符串列表,它按插入顺序排序

使用场景:使用List的数据结构,可以做简单的消息队列的功能。另外还有一个就是,可以利用lrange命令,做基于redis的分页功能,性能极佳,用户体验好。还可以用一个场景,很合适---取行情信息。就也是个生产者和消费者的场景。list可以很好的完成排队,先进先出的原则。

Redis学习笔记(一、Redis介绍)_第6张图片

set(集合):是字符串类型的无序集合,也不可重复

使用场景:因为set堆放的是一堆不重复值的集合。所以可以做全局去重的功能。为什么不用JVM自带的Set进行去重?因为我们的系统一般都是集群部署,使用JVM自带的Set,比较麻烦,难道为了一个做一个全局去重,再起一个公共服务,太麻烦了。另外,就是利用交集、并集、差集等操作,可以计算共同喜好,全部的喜好,自己独有的喜好等功能。

Redis学习笔记(一、Redis介绍)_第7张图片

zset(sorted set有序集合):是string类型的有序集合,也不可重复

有序集合中的每个元素都需要指定一个分数,根据分数对元素进行升序排序,如果多个元素有相同的分数,则以字典序进行升序排序,sorted set因此非常适合实现排名。

使用场景:sorted set多了一个权重参数score,集合中的元素能够按score进行排列。可以做排行榜应用,取TOP N操作。

Redis学习笔记(一、Redis介绍)_第8张图片

 

Redis安装

可执行文件说明,三种启动方法,简单的客户端连接

安装步骤

Linux:wget http://download.redis.io/releases/redis-3.07.tar.gz(官网下载)

tar -xzf redis-3.07.tar.gz(解压缩)

In -s redis-3.07 redis(软连接)

cd redis

make && make install(编译安装)

完成后可在source目录下看到(可执行文件):

redis-server(Redis服务器)

redis-cli(redis命令行客户端)

redis-benchmark(Redis性能测试工具)

redis-check-aof(AOF文件修复工具)

redis-check-dump(RDB文件检查工具)

redis-sentinel(Sentinel服务器2.8以后)

 

三种启动方法

最简启动(默认启动):redis-server

验证方式:ps -ef | grep redis(查看进程)

                  netstat -antpl | grep redis(查看端口)

                  redis-cli -h ip -p port ping

动态参数启动:redis-server --port 6380

配置文件启动:先写配置文件 redis-server configPath

对比:生产环境选择配置启动;(一台机器配置多台redis,都使用其他配置会麻烦)单机多实例配置文件可以用端口区分开

客户端连接

Redis学习笔记(一、Redis介绍)_第9张图片

 

 

 

 

你可能感兴趣的:(项目经验,面试总结)