首页 > 数据库 >Spring中使用redis

Spring中使用redis

时间:2022-11-28 16:45:00浏览次数:42  
标签:map set ops Spring redis 使用 new public redisTemplate

1.pom.xml

<!--    redis-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

<!--  commonsPool2-->
<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-pool2</artifactId>
</dependency>

2.application.yml

spring:
  redis:
    host: 127.0.0.1
    port: 6379
    password:
    database: 0
    #客户端超时时间单位是毫秒
    timeout: 10000ms
    jedis:
      pool:
        #最大连接数
        max-active: 8
        #最大连接阻塞等待时间 毫秒
        max-wait: 10000ms
        #最大空闲连接
        max-idle: 200
        #最小空闲连接
        min-idle: 5

3.RedisConfig类

实现序列化 否则以二进制形式存储

@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<String,Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory){
        RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
        //为string类型的key设置序列化
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //为string类型的value设置序列化
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        //为hash类型的key设置序列化
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        //为hash类型的value设置序列化
        redisTemplate.setHashValueSerializer(new StringRedisSerializer());
        redisTemplate.setConnectionFactory(lettuceConnectionFactory);
        return  redisTemplate;
    }
}

4.User类

public class User implements Serializable {
    private Integer uid;
    private String userName;

    public Integer getUid() {
        return uid;
    }

    public void setUid(Integer uid) {
        this.uid = uid;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }
}

5.五种数据类型和键操作


@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisTest {

    @Resource
    private RedisTemplate<String, String> redisTemplate;

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    /**
     * 连接
     */
    @Test
    public void init(){
        //二进制形式
        ValueOperations ops = redisTemplate.opsForValue();
        ops.set("name","str");
        //正常看到
        ValueOperations<String,String> valueOperations = stringRedisTemplate.opsForValue();
        valueOperations.set("lwx","mmg");

    }

    /**
     * 序列化
     */
    @Test
    public void SerialTest(){
        User user = new User();
        user.setUid(1);
        user.setUserName("lwx");

        ValueOperations ops = redisTemplate.opsForValue();
        ops.set("user",user);
    }
    @Test
    public void testString(){
        ValueOperations ops = redisTemplate.opsForValue();
        ops.set("str","string");

        String str = (String) ops.get("str");
        System.out.println(str);
        //层级
        ops.set("user:01","list1");
        //添加多条
        Map<String,String> map = new HashMap<>();
        map.put("str1","string");
        map.put("str2","string");
        ops.multiSet(map);
        //获取多条
        List<String> keys = new ArrayList<>();
        keys.add("str");
        keys.add("str1");
        keys.add("str2");
        List list = ops.multiGet(keys);
        list.forEach(System.out::println);

        redisTemplate.delete("str1");


    }

    @Test
    public void hashTest(){
        HashOperations hashOperations = redisTemplate.opsForHash();
        hashOperations.put("map","name","lwx");
        hashOperations.get("map","name");
        //多条
        Map<String,String> map = new HashMap<>();
        map.put("age","20");
        map.put("address","sd");
        hashOperations.putAll("map",map);
        //获取多条
        List<String> keys = new ArrayList<>();
        keys.add("name");
        keys.add("age");
        keys.add("address");
        List list = hashOperations.multiGet("map",keys);
        list.forEach(System.out::println);
        //获取所有
        Map<String,String> m = hashOperations.entries("map");
        m.entrySet().forEach(e ->{
            System.out.println(e.getKey() + " " + e.getValue());
        });

        hashOperations.delete("map","name","address");
    }


    @Test
    public void testList(){
        ListOperations listOperations = redisTemplate.opsForList();
        listOperations.leftPush("list","1");
        listOperations.leftPush("list","2");
        listOperations.rightPush("list","3");

        List list = listOperations.range("list",0,3);
        list.forEach(System.out::println);

        System.out.println(listOperations.size("list"));

        listOperations.remove("list",1,"1");
    }

    @Test
    public void setTest(){
        SetOperations setOperations = redisTemplate.opsForSet();
        setOperations.add("set","a","b");
        //获取
        Set set = setOperations.members("set");
        set.forEach(System.out::println);

        setOperations.remove("set","a");
    }

    @Test
    public void SortedSetTest(){
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();

        ZSetOperations.TypedTuple<Object> objectTypedTuple = new DefaultTypedTuple<>(
                "lwx",6D);
        ZSetOperations.TypedTuple<Object> objectTypedTuple1 = new DefaultTypedTuple<>(
                "lwx1",7D);
        ZSetOperations.TypedTuple<Object> objectTypedTuple2 = new DefaultTypedTuple<>(
                "lwx2",5D);
        Set<ZSetOperations.TypedTuple<Object>> tuples = new HashSet<>();
        tuples.add(objectTypedTuple);
        tuples.add(objectTypedTuple1);
        tuples.add(objectTypedTuple2);

        zSetOperations.add("score",tuples);

        Set set = zSetOperations.range("score",0,5);
        set.forEach(System.out::println);

    }

    @Test
    public void keyTest(){
        Set keys = redisTemplate.keys("*");

        ValueOperations ops = redisTemplate.opsForValue();
        ops.set("code","test",20, TimeUnit.SECONDS);
        redisTemplate.getExpire("code");
        //给已经存在的key设置失效时间
        redisTemplate.expire("address",20,TimeUnit.SECONDS);
    }
}

标签:map,set,ops,Spring,redis,使用,new,public,redisTemplate
From: https://www.cnblogs.com/lwx11111/p/16932586.html

相关文章

  • Easy系列各视频平台云台控制功能的使用注意事项汇总
    TSINGSEE青犀视频旗下Easy系列视频平台,比如EasyCVR、EasyNVR、EasyGBS等,均可支持对摄像头的云台控制,包括摄像头的焦距调整、方向调整等。在视频监控场景中,摄像头的云台控制......
  • EasyCVR电子放大功能的操作使用及注意事项
    EasyCVR平台基于云边端一体化架构,具有强大的数据接入、处理及分发能力。平台可在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,可实现的视频功能包括:......
  • Ext Js中Ext.XTemplate使用方法学习
    1:基本知识    XTemplate是Ext.Template扩展的新类,它支持高级功能的模板类,如自动数组输出、条件判断、子模板、基本数学运行、特殊内建的模板变量,直接执行代码和更多的......
  • 4.使用shell脚本查看系统资源利用率
    #!/bin/bashfunctionCPU(){  util=`vmstat|awk'{if(NR==3)print$13+$14}'`    iowait=`vmstat|awk'{if(NR==3)print$16}'`    echo"CPU使......
  • MySQL多表查询及pymysql简单使用
    目录多表查询的两种方法小知识点补充说明可视化软件Navicat多表查询练习题python操作MySQLpymysql补充说明多表查询的两种方法方式一:连表操作innerjoin内连接 selec......
  • Neo4j如何使用Data Fabric技术编织万亿图数据
    Neo4j如何使用DataFabric技术编织万亿图数据​​Neo4j如何使用DataFabric技术编织万亿图数据​​​​一、数据编织(DataFabric)​​​​二、Neo4jFabric简介​​​​三、F......
  • 使用开源软件攒一个企业级图数据平台解决方案
    使用开源软件攒一个企业级图数据平台解决方案​​使用开源软件攒一个企业级图数据平台解决方案​​Here’sthetableofcontents:使用开源软件攒一个企业级图数据平台解......
  • 说说nextTick的使用和原理?
    分析这道题及考察使用,有考察原理,nextTick在开发过程中应用的也较少,原理上和vue异步更新有密切关系,对于面试者考查很有区分度,如果能够很好回答此题,对面试效果有极大帮助。......
  • SpringSecurity多表验证
    在开始之前我想感叹一句,技术久了不回头看看真的会忘记的,这次公司让我重新开发一个程序,项目架构为单体多模块开发,其中有个需求就是需要不同用户表进行登录,且不同表的用户名......
  • 在非k8s 环境下 的应用 使用 Dapr Sidekick for .NET
    在k8s环境下,通过Operator可以管理Daprsidecar,在虚拟机环境下,我们也是非常需要这样的一个管理组件,类似下图:​​​​在这张图片中,在上图左面,我们看到了“dapr.exe”、我们......