Spring篇】六. Spring整合Redis

中國加油,武漢加油!

篇幅較長,配合目錄觀看

項目準備

  1. 本案例基於liunx篇】 十二. Redis簡介及安裝 一
  2. liunx篇】 十二. Redis常用命令和數據類型 二
  3. liunx篇】 十二. Redis事務 三
  4. liunx篇】 十二. Redis發佈訂閱和超時指令 四
  5. liunx篇】 十二. Redis持久化機制和內存回收機制 五

1. 新建spring-redis

1.1 刪掉src做站點工程

2. java操作Redis

2.1 spring-redis下新建java-redis(module-maven)

2.2 導包

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

2.3 Test

package com.wpj;

import org.junit.Test;
import redis.clients.jedis.Jedis;

public class JedisTest {

    @Test
    public void testJedis(){
        // 連接Redis
        Jedis jedis = new Jedis("192.168.59.100", 6379);
        // 設置連接jedis密碼
        jedis.auth("admin");
        // 設置一個鍵值對
        jedis.set("name","wpj");
        // 根據鍵獲取值
        String name = jedis.get("name");
        System.out.println(name);
        // 關閉連接
        jedis.close();
    }
}

在這裏插入圖片描述
在這裏插入圖片描述

3. spring操作redis

3.1 spring-redis下新建spring-redis2(module-maven)

3.2 導包

<!-- spring整合redis的依賴 -->
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>1.8.8.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>4.3.12.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.3.12.RELEASE</version>
</dependency>
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

3.3 編寫beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
       
    <!-- 創建一個連接的對象-->
    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxIdle" value="50" />          <!-- 最大空閒數 -->
        <property name="maxTotal" value="100" />        <!-- 最大連接數 -->
        <property name="maxWaitMillis" value="20000" /> <!-- 最大等待時間 -->
    </bean>
    
    <!-- 配置redis連接工廠 -->
    <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <property name="poolConfig" ref="poolConfig" />         <!-- 連接池配置 -->
        <property name="hostName" value="192.168.59.100" />     <!-- 連接主機 -->
        <property name="port" value="6379" />                   <!-- 端口 -->
        <property name="password" value="admin" />              <!-- 密碼 -->
    </bean>
    
    <!-- 配置redis模板對象 -->
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <property name="connectionFactory" ref="connectionFactory" />        <!-- 配置連接工廠 -->
        <property name="keySerializer" ref="stringRedisSerializer" />        <!-- 設置字符串序列方式 -->
        <property name="valueSerializer" ref="stringRedisSerializer" />      <!-- 設置字符串序列方式 -->
    </bean>
    
    <!-- 字符串序列化 -->
    <bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer">
    </bean>
</beans>

3.3 Test

package com.wpj;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(value = SpringJUnit4ClassRunner.class)
@ContextConfiguration(value ="classpath:beans.xml")
public class SpringRedisTest {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void testSpringRedis(){
        redisTemplate.opsForValue().set("username","admin");
        System.out.println(redisTemplate.opsForValue().get("username"));
    }
}

在這裏插入圖片描述
在這裏插入圖片描述

3.4 其他類型

package com.wpj;

import com.wpj.bean.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.*;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.List;
import java.util.Set;

@RunWith(value = SpringJUnit4ClassRunner.class)
@ContextConfiguration(value ="classpath:beans.xml")
public class SpringRedisTest {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void testSpringRedis(){
        redisTemplate.opsForValue().set("name","吳培傑");
        System.out.println(redisTemplate.opsForValue().get("name"));
    }
    @Test
    public void testAddUser() {
        ValueOperations valueOperations = redisTemplate.opsForValue();
        // 1.創建一個對象
        User user = new User();
        user.setId(10);
        user.setUsername("admin");
        // 2.添加到redis中,記得把stringRedisSerializer去掉
        valueOperations.set("user", user);
        // 3.獲取
        User user1 =(User) valueOperations.get("user");
        System.out.println(user1.getUsername());
        redisTemplate.delete("user");
    }

    /**
     * 操作Hash類型
     */
    @Test
    public void testHash(){
        HashOperations hash = redisTemplate.opsForHash();
        // put key filed value
        hash.put("stu","name","admin");
        hash.put("stu","age","12");

        Object o = hash.get("stu", "name");
        System.out.println(o);

        hash.delete("xxx","xx");
    }

    /**
     * 操作List類型
     */
    @Test
    public void testList(){
        ListOperations listOperations = redisTemplate.opsForList();
        // lpul key a1  a2 a3
        listOperations.leftPush("books","java");
        listOperations.leftPush("books","js");
        listOperations.leftPushAll("books","js","c#",".net");

        List<String> books = listOperations.range("books", 0, -1);
        for(String key :books){
            System.out.println(key);
        }

        listOperations.leftPop("books");
        listOperations.rightPop("books");
        listOperations.remove("books",2,"java");
        listOperations.index("books",3); // 獲取指定位置的元素
        Long books1 = listOperations.size("books"); // 獲取key的長度
    }

    /**
     * 操作Set類型
     */
    @Test
    public void testSet(){
        SetOperations setOperations = redisTemplate.opsForSet();
        setOperations.add("phones","xiaomi","hauwei","phone");
        Set phones = setOperations.members("phones"); // 獲取key中所有的數據
        System.out.println(phones);
        setOperations.pop("phones"); // 隨機彈出一個元素

    }

    /**
     * 操作Sorted Set類型
     */
    @Test
    public void testSortedSet(){
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        zSetOperations.add("demo","zs",10.0);
        zSetOperations.add("demo","lisi",20.0);
        zSetOperations.add("demo","wagnwu",15.0);

        Set demo = zSetOperations.range("demo", 0, -1);
        System.out.println(demo);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章