一、安装Redis
下载,上传,解压tar包
http://download.redis.io/releases/redis-5.0.0.tar.gz
1.安装C语言编译环境
yum install -y gcc-c++
2.编译:进入Redis解压目录(一般放/opt目录下)执行make命令
cd /opt/redis-5.0.0
make
3.安装:
make install
4.创建redis专属目录
mkdir /usr/local/redis
5.将redis.conf复制到专属目录
cp /opt/redis-5.0.0/redis.conf /usr/local/redis
6.修改redis.conf(开启守护进程)
vim /usr/local/redis/redis.conf
①开启守护进程
37 # By default Redis does not run as a daemon. Use 'yes' if you need it.
38 # Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
39 daemonize yes
②设置密码
504 # requirepass foobared
505 requirepass 123456
可选:(指定目录记录日志信息 logfile "/var/log/redis.log")
7.启动Redis服务端
/usr/local/bin/redis-server /usr/local/redis/redis.conf
8.客户端登录
/usr/local/bin/redis-cli -h 192.168.88.129 -p 6379 -a 123456
二、java连接操作
添加pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
常用的连接工具是Jedis,我这里用的是RedisTemplate,都差不多
首先是配置文件application.proproperties(用的是springboot)
# Redis数据库索引(默认为0),如果设置为1,那么存入的key-value都存放在select 1中
spring.redis.database=0
#Redis服务器地址
spring.redis.host=192.168.88.129
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码
spring.redis.password=123456
# 连接超时时间(毫秒)
spring.redis.timeout=2000
# 连接池中的最大空闲连接
spring.redis.jedis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.jedis.pool.min-idle=0
#连接池最大连接数(使用负值表示没有限制
spring.redis.jedis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.jedis.pool.max-wait=-1
直接上Redis的配置类(可以结合SpringCache用),这里以操作hash数据结构(redis5新增了流数据类型Stream,现在是六大数据类型了)为例,其他的就不说了
@EnableCaching
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
/**
* 缓存管理器 使用cache注解管理redis缓存
* @param connectionFactory
* @return
*/
@Bean
public CacheManager cacheManager(RedisConnectionFactory connectionFactory){
//初始化一个RedisCacheWriter
RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
//解决查询缓存转换异常的问题
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
RedisSerializationContext.SerializationPair<Object> pair = RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer);
RedisCacheConfiguration defaultCacheConfig=RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofHours(12)).serializeValuesWith(pair);
RedisCacheManager redisCacheManager = new RedisCacheManager(redisCacheWriter, defaultCacheConfig);
//RedisCacheManager cacheManager = RedisCacheManager.create(connectionFactory);
return redisCacheManager;
}
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
// 使用Jackson2JsonRedisSerializer替换默认序列化
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
// 设置value的序列化规则和 key的序列化规则
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringRedisSerializer);
redisTemplate.setHashKeySerializer(stringRedisSerializer);
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setConnectionFactory(factory);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
/**
* 对hash类型的数据操作
*
* @param redisTemplate
* @return
*/
@Bean
public HashOperations<String, Object, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) {
return redisTemplate.opsForHash();
}
}
测试类
@Test
public void testRedisHash(){
Map<String, Object> map = new HashMap<>();
map.put("mapkey","mapvalue");
//单个增加
hashOperations.put("hashkey1","hashkey1k","hashkey1v");
//添加map
hashOperations.putAll("hashkey2",map);
System.err.println(hashOperations.get("hashkey1","hashkey1k"));
Map<Object, Object> hashkey2 = hashOperations.entries("hashkey2");
for (Map.Entry<Object,Object> entry: hashkey2.entrySet()) {
System.err.println("Key="+entry.getKey()+", Value="+entry.getValue());
}
}
输出
查看redis数据库