String整合Redis的步骤

Posted 深擁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了String整合Redis的步骤相关的知识,希望对你有一定的参考价值。

1.导入依赖(pom文件报错,就可以找到maven的本地仓库,然后把相应的依赖的文件夹删除,重新maven update 项目,就会自动在中央仓库,或者是阿里云仓库下载),编写redis.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" 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.xml配置文件(Redis默认使用JDK的序列化方式)在配置文件里修改ip地址

<!-- 声明一个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里会是这样的形式

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

 让spring来加载redis.xml

<!-- 加载Redis的配置文件 -->
    <import resource="classpath:redis.xml"></import>

 

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());//可变参

 

原理

从Java到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);
        }

 

以上是关于String整合Redis的步骤的主要内容,如果未能解决你的问题,请参考以下文章

redis集群单击版本与spring整合步骤

spring boot 整合 redis

Spring整合kafka消费者和生产者&redis的步骤

springboot整合redis实现秒杀功能

如何用SpringBoot整合Redis(详细讲解~)

SpringBoot整合Redis以及缓存穿透缓存雪崩缓存击穿的理解如何添加锁解决缓存击穿问题?分布式情况下如何添加分布式锁