String整合Redis的步骤

1.导入依赖

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:lang="http://www.springframework.org/schema/lang"
    xmlns:jms="http://www.springframework.org/schema/jms" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:cache="http://www.springframework.org/schema/cache"
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:oxm="http://www.springframework.org/schema/oxm"
    xmlns:task="http://www.springframework.org/schema/task" xmlns:tool="http://www.springframework.org/schema/tool"
    xmlns:websocket="http://www.springframework.org/schema/websocket"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
        http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd
        http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
        http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm.xsd
        http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd
        http://www.springframework.org/schema/tool http://www.springframework.org/schema/tool/spring-tool.xsd
        http://www.springframework.org/schema/websocket http://www.springframework.org/schema/websocket/spring-websocket.xsd">

        
        
</beans>

2.编写配置文件(Redis默认使用JDK的序列化方式)

<!-- 声明一个string序列化方式 -->
<bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
<!-- 声明一个默认的jdk的序列化方式 -->
<bean id="jdkSerializationRedisSerializer" class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"></bean>
<!-- 声明一个jackson的序列化方式 -->
<bean id="jackson2JsonRedisSerializer" class="org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer">
<constructor-arg value="java.lang.Object"></constructor-arg>
</bean>

<!-- 声明一个redis的模板,用来操作redis增删改查的类 -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<!-- 引入连接工厂,让模板对象加载的时候,就初始化redis的连接 -->
<property name="connectionFactory" ref="jedisConnectionFactory"></property>

<!--指定redis可以的序列化方式 -->
<property name="keySerializer" ref="stringRedisSerializer"></property>
<!-- 指定value的序列化方式 -->
<property name="valueSerializer" ref="jdkSerializationRedisSerializer"></property>
<!-- 指定hashkey的序列化方式 -->
<property name="hashKeySerializer" ref="stringRedisSerializer"></property>
<!-- 指定hashvalue的序列化方式 -->
<property name="hashValueSerializer" ref="jdkSerializationRedisSerializer"></property>
</bean>

<!-- 声明一个连接工厂 -->
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<!-- 指定redis的ip和端口号 -->
<property name="hostName" value="192.168.26.130"></property>
<property name="port" value="6379"></property>
</bean>

要指定序列化方式,如果不指定在Redis里会是这样的形式

127.0.0.1:6379> keys *
1) "\xac\xed\x00\x05t\x00\x06myzset"
2) "\xac\xed\x00\x05t\x00\x06mylist"
3) "\xac\xed\x00\x05t\x00\x06myset1"
4) "\xac\xed\x00\x05t\x00\x06myhash"

3.创建一个测试类,注入redis的模板,用操作redis的crud(增删改查)

@Autowired
    RedisTemplate redisTemplate;

4.加入注解

//去警告的注解
@SuppressWarnings("rawtypes")
//spring整合junit单元测试
@RunWith(SpringJUnit4ClassRunner.class)
//加载配置文件的注解
@ContextConfiguration("classpath:redis.xml")

5.测试Redis的string类型

@Test
    public void testString() {
        //往Redis存string类型
        redisTemplate.opsForValue().set("name", "zhangsan");
        System.out.println("保存到Redis成功");
        //从Redis中取
        String value = (String) redisTemplate.opsForValue().get("name");
        System.out.println("获取的值是:"+value);
        //删除指定的key
        //redisTemplate.delete("name");
    }

6.测试Redis的list类型

创建一个实体类,这个实体类必须实现序列化接口

public class User implements Serializable{

    private int id;
    private String name;
    public User(int id, String name) {
        super();
        this.id = id;
        this.name = name;
    }
    public User() {
        super();
        // TODO Auto-generated constructor stub
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + "]";
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    
    
}

测试list

第一种方式:直接以数组的方式存入

@Test
    public void testList() {
        User u1 = new User(1,"zhangsan");
        User u2 = new User(2,"lisi");
        User u3 = new User(3,"wangwu");
        User u4 = new User(4,"zhaoliu");
        //往Redis中存入list类型的对象
        redisTemplate.opsForList().leftPushAll("mylist", u1,u2,u3,u4);
        //从redis获取list类型的数据
        List range = redisTemplate.opsForList().range("mylist", 0, -1);
        for (Object object : range) {
            System.out.println(object);
        }
    }

第二种方式:存入集合,再转换成数组

ArrayList<User> list = new ArrayList<User>();
        list.add(u1);
        list.add(u2);
        list.add(u3);
        list.add(u4);
redisTemplate.opsForList().leftPushAll("mylist", list.toArray());//可变参

原理

String整合Redis的步骤7.测试hash

第一种存入单个键值对

//存单个键值对
        //redisTemplate.opsForHash().put("myhash", "username", "zhangsan");

第二种存入多个键值对,用map的形式

//存多个键值对
        User u1 = new User(1,"zhangsan");
        User u2 = new User(2,"lisi");
        User u3 = new User(3,"wangwu");
        User u4 = new User(4,"zhaoliu");
        HashMap<String, User> map = new HashMap<String, User>();
        map.put("u1", u1);
        map.put("u2",u2);
        map.put("u3", u3);
        map.put("u4", u4);
        //在hash中存入多个键值对,就用map的方式
        redisTemplate.opsForHash().putAll("myhash", map);

获取所有的key值

Set keys = redisTemplate.opsForHash().keys("myhash");
        for (Object key : keys) {
            System.out.println(key);
        }

获取所有的value值

List values = redisTemplate.opsForHash().values("myhash");
        for (Object value : values) {
            System.out.println(value);
        }

获取所有的键值对

Map entries = redisTemplate.opsForHash().entries("myhash");
        Set entrySet = entries.entrySet();
        for (Object object : entrySet) {
            System.out.println(object);
        }

8.测试set

在set中存入数据

redisTemplate.opsForSet().add("myset1", "a","b","c","d");

在set中查看数据

Set members = redisTemplate.opsForSet().members("myset1");
        for (Object object : members) {
            System.out.println(object);
        }

求两个集合的交集

Set intersect = redisTemplate.opsForSet().intersect("myset1", "myset2");
        for (Object object : intersect) {
            System.out.println(object);
        }

求两个集合的并集

Set union = redisTemplate.opsForSet().union("myset1", "myset2");
        for (Object object : union) {
            System.out.println(object);
        }

求两个集合的差集(前面集合中有,后面集合中没有)

Set diff = redisTemplate.opsForSet().difference("myset1", "myset2");
        for (Object ob : diff) {
            System.out.println(ob);
        }

9.测试zset

存数据

redisTemplate.opsForZSet().add("myzset", "zhangsan", 80);
        redisTemplate.opsForZSet().add("myzset", "lisi", 90);
        redisTemplate.opsForZSet().add("myzset", "wangwu", 60);

取(按分值从小到大的顺序取的)

Set range = redisTemplate.opsForZSet().range("myzset", 0, -1);
        for (Object object : range) {
            System.out.println(object);
        }

按照分值从大到小的顺序

Set reverseRange = redisTemplate.opsForZSet().reverseRange("myzset", 0, -1);
        for (Object object : reverseRange) {
            System.out.println(object);
        }

相关推荐