1. 程式人生 > >redis的安裝與連線 Java的基本操作

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資料庫