Redis 与其他key-value缓存产品有以下三个特点
-
redis支持数据的持久化,持久化的意思是可以将内存中的数据保存在磁盘中,重启可以再次使用。
-
Redis 不仅仅支持key- value类型的数据, 同时还提供了list,set zset,hash等数据存储结构
-
Redis 支持数据备份。Master-slave模式的数据备份
Redis的优势
- 性能比较高。Redis能读的数据是11万次每秒、写的速度是8万次每秒
- 数据类型支持,string,lists hashes sets 以及ordered sets数据类型操作
- 原子性,redis 所有操作都是原子性,与事务的原子性相同,要么成功,要么失败
安装
- 准备vm虚拟机。本地运行测试。
- 安装系统 centor 7
- 下载redis启动
下载
-
下载地址 : http://redis.io/download
选择最新稳定的下载。由于不能上图自己找下载量最多的即可 -
运行虚拟机登录,运行管理员sudo命令,如果你是子用户,为了打字方便,我默认为root用户
-
Wget http://download.redis.io/releases/redis-2.8.17这个是你下载的版本.tar.gz
可以用命令直接下载,也可以下载到本地,放在文件夹进行解压
Tar xzf redis-2.8.17.tar.gz
进行解压
Cd redis-2.8.17
进入到redis里面进行编译
make
Make编译完成之后,redis-2.8.17目录下回出现编译后的redis服务程序,redis-server,还有用于测试客户端程序的redis-cli,两个程序都在安装目录下的src目录当中,编译后就能看到
进入到src目录下
cd src
启动redis-server
./ redis-server
这样便启动了redis你可以看到一个大盒子。表示启动成功
这种启动方式,属于默认的启动方式,端口号和配置文件都是默认配置的
一般在开发工作当中,我们会配置,redis-conf 这个配置文件。所以启动也会通过配置参数 进行启动
cd src
./redis-server …/redis.conf
你可以对配置文件redis-conf进行查看配置
Config get *
里面参数也是后面java你想配置的参数,也可以设置auth redis的密码。端口号默认的6379地址正常是本地127.0.0.1地址。如果注释掉本地就是所有连接都可以连接
Redis既然已经启动了,你可以重启一个再启动一个链接,方便操作
./redis-cli
客户端启动,进行操作,你可以进行set put append 这些数据类型的方法,测试一下
Get set 操作,redis 有9个库默认是select 0这个库。这个可以了解一下
这样正常的一个liunx环境下的redis就已经装配完成;
接下来就是我们在开发用java写东西不可能用redis客户端来操作,需要进行连接交互;
准备工作,基本跟其他博客文章类似
使用的是jedis连接,本文已经声明用jedis进行连接,redis 官网上面有很多种连接方式,大家可以参考,基本连接方式大同小异熟悉一种连接其他的看一下基本就可以了解了;
- 需要准备使用jedis jar包,导入依赖在pom上面加依赖,具体可参考其他博客我这边无法传图
- 如果你采用jedis使用连接池需要使用,common-pool jar 包
- 其他基础配置开发环境,开发软件,jdk,maven 就不说了
- 影响连接的可能出现的两个因素, redis 配置问题,防火墙问题,关闭防火墙
Redis.conf 里面配置项, bind 127.o.o.1 默认配置,说明只能允许连接本机
Redis.conf 里面配置项,requirepass xxx 设置密码,说明客户端需要带上auth参数,也就是redis密码
配置方式
- 第一种,spring boot里面在application.yml里面配置参数
- 第二种,spring application 里面在bean配置里面配置参数
第一种
Redis数据库索引(默认为0)
spring.redis.database=0
Redis服务器地址
spring.redis.host=192.168.12.43
Redis服务器连接端口
spring.redis.port=6379
Redis服务器连接密码(默认为空)
spring.redis.password=redis
连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
连接池中的最大空闲连接
spring.redis.pool.max-idle=8
连接池中的最小空闲连接
spring.redis.pool.min-idle=0
连接超时时间(毫秒)
spring.redis.timeout=0
@Configuration
public class RedisConfiguration {
Logger logger = LoggerFactory.getLogger(RedisCacheConfiguration.class);
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.timeout}")
private int timeout;
@Value("${spring.redis.pool.max-idle}")
private int maxIdle;
@Value("${spring.redis.pool.max-wait}")
private long maxWaitMillis;
@Value("${spring.redis.password}")
private String password;
@Bean
public JedisPool redisPoolFactory()
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
//你可以把上面需要配置的数学,由于vlue已经指定了application配置的值,所以你可以进行自定义配置
JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, password);
//返回一个jedispool 获取jedis jedis = jedisPool.getResource()即可获得jedis
return jedisPool;
}
}
得到连接池之后,可以通过
jedis = jedisPool.getResource()
获得jedis,考虑到多线程问题,可以在获取方法上加锁,可能会涉及异常问题,进行try catch
最后可以写一个方法,jedis的关闭方法。或者获取jedis之后使用,在try进行,最后进行关闭也可以
第二种,跟第一种有点类似
可以定义一个redis.properties 配置文件 基本跟springboot写法差不多
还有一种就是bean配置
<bean id = "jedispoolconfig" class = "redis.clients.jedispoolconfig">
<p:"maxactive" = "600"/>
<p:"maxidil" = "400"/>
<p:"maxwait" = "200"/>
// 这就配置了一个config 可以继续配置property
// 配置连接池
<bean id = "jedispool" class ="redis.clients.jedsi.jedispool" scope="singleton">
<constructor-arg index ="0” ref= “”jedispoolconfig“”>
<constructor-arg index="1">
<list>
<bean class = "redis.clients.jedis.jedisshardinfo">
<constructor-arg name = "host" value = "127.0.01"/>
<constructor-arg name = port value = "6379"/>
<bean/>
</list>