1、下载redis安装包,解压后进入redis目录,执行命令redis-server.exe redis.windows.conf,redis解压后目录如图。
2、项目中如何使用Jedis使用现在大家都喜欢用maven作为项目管理利器,那我只说明一下Maven如何使用jedis,只需要添加以下依赖就可以。
3、建立一个简单的连接。
4、创建一个简单Jedis对象就是这样,告诉它的IP地址和端口号就可以,如果redis有密码,那需要在建立连接时,需要调用auth方法设置密码。当然,简单连接不适合真实的环境使用,需要有连接池支持 。建立Jedis连接池。
5、Jedis分片采用Hash算法和基于的Key模式匹配。Jedis定义一个Hash接口,如果觉得自带的不爽,可以自己实现一个Hash算法。Jedis自带的Hash的算法是MurmurHash 2.0 。
共同点:都提供了基于Redis *** 作的Java API,只是封装程度,具体实现稍有不同。
不同点:
是Redis的Java实现的客户端。支持基本的数据类型如:String、Hash、List、Set、Sorted Set。
特点:使用阻塞的I/O,方法调用同步,程序流需要等到socket处理完I/O才能执行,不支持异步 *** 作。Jedis客户端实例不是线程安全的,需要通过连接池来使用Jedis。
优点点:分布式锁,分布式集合,可通过Redis支持延迟队列。
用于线程安全同步,异步和响应使用,支持集群,Sentinel,管道和编码器。
基于Netty框架的事件驱动的通信层,其方法调用是异步的。Lettuce的API是线程安全的,所以可以 *** 作单个Lettuce连接来完成各种 *** 作。
maven配置引入,(要加上版本号,我这里是因为Parent已声明)
application-dev.yml
redisson-config.yml
或者,配置 redisson-config.json
新建读取配置类
或者,在 application.yml中配置如下
4.3.1 丰富的jar支持,尤其是对 Netty NIO框架
4.3.2 丰富的配置机制选择,这里是详细的配置说明
关于序列化机制中,就有很多
4.3.3 API支持(部分展示),具体的 Redis -->RedissonClient ,可查看这里
4.3.4 轻便的丰富的锁机制的实现
参考 RedisTemplate 配置。
另外,还需要额外的配置类
基于spring缓存实现
不多说直接上代码:
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<exclusion>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</exclusion>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 添加jedis客户端 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<!--spring2.0集成redis所需common-pool2-->
<!-- 必须加上,jedis依赖此 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.5.0</version>
</dependency>
<!-- 将作为Redis对象序列化器 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
#Matser的ip地址
redis.hostName=172.16.44.148
#端口号
redis.port=6379
#如果有密码
redis.password=
#客户端超时时间单位是毫秒 默认是2000
redis.timeout=10000
#最大空闲数
redis.maxIdle=300
#连接池的最大数据库连接数。设为0表示无限制,如果是jedis 2.4以后用redis.maxTotal
#redis.maxActive=600
#控制一个pool可分配多少个jedis实例,用来替换上面的redis.maxActive,如果是jedis 2.4以后用该属性
redis.maxTotal=1000
#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
redis.maxWaitMillis=1000
#连接的最小空闲时间 默认1800000毫秒(30分钟)
redis.minEvictableIdleTimeMillis=300000
#每次释放连接的最大数目,默认3
redis.numTestsPerEvictionRun=1024
#逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
redis.timeBetweenEvictionRunsMillis=30000
#是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个
redis.testOnBorrow=true
#在空闲时检查有效性, 默认false
redis.testWhileIdle=true
package com.junsi.demo.config
import org.springframework.beans.factory.annotation.Value
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.PropertySource
import org.springframework.data.redis.connection.RedisConnectionFactory
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory
import org.springframework.data.redis.core.RedisTemplate
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer
import org.springframework.data.redis.serializer.StringRedisSerializer
import com.junsi.demo.utils.RedisUtil
import redis.clients.jedis.JedisPoolConfig
/**
* Redis配置类
* @author pzx
* 2019年6月8日
*/
@Configuration
@PropertySource("classpath:redis.properties")
public class RedisConfig {
@Value("${redis.maxIdle}")
private Integer maxIdle
@Value("${redis.maxTotal}")
private Integer maxTotal
@Value("${redis.maxWaitMillis}")
private Integer maxWaitMillis
@Value("${redis.minEvictableIdleTimeMillis}")
private Integer minEvictableIdleTimeMillis
@Value("${redis.numTestsPerEvictionRun}")
private Integer numTestsPerEvictionRun
@Value("${redis.timeBetweenEvictionRunsMillis}")
private long timeBetweenEvictionRunsMillis
@Value("${redis.testOnBorrow}")
private boolean testOnBorrow
@Value("${redis.testWhileIdle}")
private boolean testWhileIdle
@Value("${spring.redis.cluster.nodes}")
private String clusterNodes
@Value("${spring.redis.cluster.max-redirects}")
private Integer mmaxRedirectsac
/**
* JedisPoolConfig 连接池
* @return
*/
@Bean
public JedisPoolConfig jedisPoolConfig() {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig()
// 最大空闲数
jedisPoolConfig.setMaxIdle(maxIdle)
// 连接池的最大数据库连接数
jedisPoolConfig.setMaxTotal(maxTotal)
// 最大建立连接等待时间
jedisPoolConfig.setMaxWaitMillis(maxWaitMillis)
// 逐出连接的最小空闲时间 默认1800000毫秒(30分钟)
jedisPoolConfig.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis)
// 每次逐出检查时 逐出的最大数目 如果为负数就是 : 1/abs(n), 默认3
jedisPoolConfig.setNumTestsPerEvictionRun(numTestsPerEvictionRun)
// 逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
jedisPoolConfig.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis)
// 是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个
jedisPoolConfig.setTestOnBorrow(testOnBorrow)
// 在空闲时检查有效性, 默认false
jedisPoolConfig.setTestWhileIdle(testWhileIdle)
return jedisPoolConfig
}
/**
* @param jedisPoolConfig
* @return
*/
@Bean
public JedisConnectionFactory JedisConnectionFactory(JedisPoolConfig jedisPoolConfig){
JedisConnectionFactory JedisConnectionFactory = new JedisConnectionFactory(jedisPoolConfig)
//连接池
JedisConnectionFactory.setPoolConfig(jedisPoolConfig)
//IP地址
JedisConnectionFactory.setHostName("172.16.44.148")
//端口号
JedisConnectionFactory.setPort(6379)
//如果Redis设置有密码
//JedisConnectionFactory.setPassword(password)
//客户端超时时间单位是毫秒
JedisConnectionFactory.setTimeout(5000)
return JedisConnectionFactory
}
/**
* 实例化 RedisTemplate 对象
*
* @return
*/
@Bean
public RedisTemplate<String, Object>functionDomainRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object>redisTemplate = new RedisTemplate<>()
initDomainRedisTemplate(redisTemplate, redisConnectionFactory)
return redisTemplate
}
/**
* 设置数据存入 redis 的序列化方式,并开启事务
*
* @param redisTemplate
* @param factory
*/
private void initDomainRedisTemplate(RedisTemplate<String, Object>redisTemplate, RedisConnectionFactory factory) {
//如果不配置Serializer,那么存储的时候缺省使用String,如果用User类型存储,那么会提示错误User can't cast to String!
redisTemplate.setKeySerializer(new StringRedisSerializer())
redisTemplate.setHashKeySerializer(new StringRedisSerializer())
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer())
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer())
// 开启事务
redisTemplate.setEnableTransactionSupport(true)
redisTemplate.setConnectionFactory(factory)
}
@Bean(name = "redisUtil")
public RedisUtil redisUtil(RedisTemplate<String, Object>redisTemplate) {
RedisUtil redisUtil = new RedisUtil()
redisUtil.setRedisTemplate(redisTemplate)
return redisUtil
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)