SpringBoot集成Redis用法笔记

tomcatf149999
发布于 2022-4-16 19:25
浏览
0收藏

今天给大家整理一下SpringBoot集成Redis用法笔记,希望对大家能有所帮助!
SpringBoot集成Redis用法笔记-鸿蒙开发者社区 一、Redis优点介绍
1、速度快
不需要等待磁盘的IO,在内存之间进行的数据存储和查询,速度非常快。当然,缓存的数据总量不能太大,因为受到物理内存空间大小的限制。
2、支持多种数据库类型
丰富的数据结构 除了string之外,还有list、hash、set、sortedset,一共五种类型。
3、单线程数据库
单线程,避免了线程切换和锁机制的性能消耗。
4、可持久化
支持RDB与AOF两种方式,将内存中的数据写入外部的物理存储设备。
5、支持发布/订阅。
6、支持Lua脚本。
7、支持分布式锁
在分布式系统中,如果不同的节点需要访同到一个资源,往往需要通过互斥机制来防止彼此干扰,并且保证数据的一致性。在这种情况下,需要使用到分布式锁。分布式锁和Java的锁用于实现不同线程之间的同步访问,原理上是类似的。
8、支持原子操作和事务Redis事务是一组命令的集合。
一个事务中的命令要么都执行,要么都不执行。如果命令在运行期间出现错误,不会自动回滚。
9、支持主从复制
支持主-从(Master-Slave)复制与高可用(Redis Sentinel)集群(3.0版本以上)
10、支持管道模式
支持管道Redis管道是指客户端可以将多个命令一次性发送到服务器,然后由服务器一次性返回所有结果。管道技术的优点是:在批量执行命令的应用场景中,可以大大减少网络传输的开销,提高性能。
11、支持多种编程语言
二、示例
1、下载redis
大家可以在官网下载 :https://redis.io/ ,有需要的话也可以留言直接发给大家。
然后启动redis。
2、引入依赖 pom.xml

<!--redis依赖配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

3、增加配置

redis:
host: localhost
database: 0
  port: 6379
  password:
jedis:
pool:
max-active: 8
      max-wait: -1ms
max-idle: 8
      min-idle: 0
  timeout: 3000ms
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

4、示例代码

package my.springboot.redis;

import my.springboot.redis.entity.UserDO;
import my.springboot.redis.service.IUserInfoService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.*;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.*;
import java.util.concurrent.TimeUnit;


/**
 * 测试UserInfo用法
 **/
@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisTest {
@Autowired
private RedisTemplate redisTemplate;
/*ValueOperations:简单K - V操作
    SetOperations:set类型数据操作
    ZSetOperations:zset类型数据操作
    HashOperations:针对map类型的数据操作
    ListOperations:针对list类型的数据操作*/

@Test
public void redisStrTest() {
        ValueOperations<String,Object> valueOperations = redisTemplate.opsForValue();
        valueOperations.set("name1","小明");
        valueOperations.set("name2","小李");
System.out.println("删除前:"+valueOperations.get("name1"));
redisTemplate.delete("name1");
//设置name1 60秒 过期
        redisTemplate.expire("name1",60, TimeUnit.SECONDS);
        System.out.println("删除后:"+valueOperations.get("name1"));
        UserDO user= new UserDO();
        user.setId(1);
        user.setUserName("小明");
        user.setPassword("123456");
        valueOperations.set("user",user);
        UserDO user1=  (UserDO) valueOperations.get("user");

    }
@Test
public void redisListTest() {
ListOperations<String,List<String>> listOperations=redisTemplate.opsForList();
        List<String> list=new ArrayList<>();
        list.add("篮球");
        list.add("足球");
        listOperations.leftPushAll("list:str",list);
        List<String> ll=listOperations.range("list:str",0,-1).get(0);
long size= listOperations.size("list:str");
for (String item: ll ) {
            System.out.println(item);
        }
// 移除操作
        redisTemplate.delete("list:str");
        List<String> aa=listOperations.leftPop("list:str");
        System.out.println(listOperations.leftPop("list:str"));
    }
@Test
public void redisHashTest() {
        HashOperations<String,Object,UserDO> hashOperations = redisTemplate.opsForHash();
        UserDO user= new UserDO();
        user.setId(1);
        user.setUserName("小明");
        user.setPassword("123456");
        hashOperations.put("user:hash",user.hashCode()+"",user);
        System.out.println(hashOperations.get("user:hash",user.hashCode()+"").getUserName());
    }
@Test
public void redisSettTest() {
        SetOperations<String,UserDO> sortOperations = redisTemplate.opsForSet();
        UserDO user= new UserDO();
        user.setId(1);
        user.setUserName("小明");
        user.setPassword("123456");

        UserDO user1= new UserDO();
        user1.setId(2);
        user1.setUserName("小张");
        user1.setPassword("888888");
        sortOperations.add("user:sort",user,user1);
        Set<UserDO> result = sortOperations.members("user:sort");
for (UserDO item : result ) {
            System.out.println(item.getUserName());

        }
redisTemplate.delete("user:sort");
        System.out.println(result);
    }

@Test
public void redisZSetTest() {
redisTemplate.delete("ranking-list");
        ZSetOperations<String,String> zsortOperations = redisTemplate.opsForZSet();
//向集合中插入元素,并设置分数
        zsortOperations.add("ranking-list", "小明", 80);
//向集合中插入多个元素
        DefaultTypedTuple<String> tuple1 = new DefaultTypedTuple<String>("小王", 100.0);
        DefaultTypedTuple<String> tuple2 = new DefaultTypedTuple<String>("小张", 90.0);
        zsortOperations.add("ranking-list", new HashSet<>(Arrays.asList(tuple1, tuple2)));

        System.out.println(zsortOperations.range("ranking-list",0,-1));

    }

}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.

本文转载自微信公众号「IT技术分享社区」

分类
收藏
回复
举报
回复
    相关推荐