redis的安裝與連線 Java的基本操作
一、安裝Redis
下載,上傳,解壓tar包
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資料庫