技术支持:Linux基本命令、常用数据结构、Java
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实现)
持久化:将所有数据保存在内存中,对数据的更新将异步得保存在磁盘上
多种数据结构: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还具备可以做分布式锁等其他功能,但是如果只是为了分布式锁这些其他功能,完全还有其他中间件(如zookpeer等)代替,并不是非要使用redis。因此,这个问题主要从性能和并发两个角度去答。
1、性能
如下图所示,我们在碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存。这样,后面的请求就去缓存中读取,使得请求能够迅速响应。
2、并发
在大并发的情况下,所有的请求直接访问数据库,数据库会出现连接异常。这个时候,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问数据库。
PS:借鉴此篇博客https://blog.csdn.net/hjm4702192/article/details/80518856
Redis一共支持五种数据类:string(字符串),Hash Tables(哈希),Linked Lists(列表),Set(集合)和zset(sorted set有序集合)。
string(字符串):是Redis的最基本的数据类型,一个键对应一个值,需要注意是一个键值最大存储512MB。
使用场景:最常规的set/get操作,value可以是String也可以是数字。一般做一些复杂的计数功能的缓存。
hash(哈希):redis hash是一个键值对的集合,是一个string类型的field和value的映射表,适合用于存储对象
使用场景:这里value存放的是结构化的对象,比较方便的就是操作其中的某个字段。在做单点登录的时候,就是用这种数据结构存储用户信息,以cookieId作为key,设置30分钟为缓存过期时间,能很好的模拟出类似session的效果。
list(列表):是redis简单的字符串列表,它按插入顺序排序
使用场景:使用List的数据结构,可以做简单的消息队列的功能。另外还有一个就是,可以利用lrange命令,做基于redis的分页功能,性能极佳,用户体验好。还可以用一个场景,很合适---取行情信息。就也是个生产者和消费者的场景。list可以很好的完成排队,先进先出的原则。
set(集合):是字符串类型的无序集合,也不可重复
使用场景:因为set堆放的是一堆不重复值的集合。所以可以做全局去重的功能。为什么不用JVM自带的Set进行去重?因为我们的系统一般都是集群部署,使用JVM自带的Set,比较麻烦,难道为了一个做一个全局去重,再起一个公共服务,太麻烦了。另外,就是利用交集、并集、差集等操作,可以计算共同喜好,全部的喜好,自己独有的喜好等功能。
zset(sorted set有序集合):是string类型的有序集合,也不可重复
有序集合中的每个元素都需要指定一个分数,根据分数对元素进行升序排序,如果多个元素有相同的分数,则以字典序进行升序排序,sorted set因此非常适合实现排名。
使用场景:sorted set多了一个权重参数score,集合中的元素能够按score进行排列。可以做排行榜应用,取TOP N操作。
可执行文件说明,三种启动方法,简单的客户端连接
安装步骤:
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,都使用其他配置会麻烦)单机多实例配置文件可以用端口区分开
客户端连接