什么是Redis

 

Redis的认识

Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。

Redis 的三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅支持简单的key-value类型的数据,同时还提供string,list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份

Redis的优势 

  • 性能极高 
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。
  • 特性丰富 – Redis支持 publish/subscribe, 通知, key 过期等特性。

基于SpringBoot框架整合Redis即关于redis的增删改查操作(CRUD)

1.导入依赖

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>

        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

2.创建实体类

@Data
public class Movie implements Serializable {
    private Integer id;//序号
    private String name;//电影名称
    private double investment;//投资
    private Date release_time;//上映时间


}

3.创建controller类

@RestController
public class MovieController {
    @Autowired
    private  RedisTemplate redisTemplate;
    //添加,修改
    @PostMapping("/set")
    public void set(@RequestBody Movie movie){
       redisTemplate.opsForValue().set("movie",movie);
   }
   //查询
   @GetMapping("/get/{key}")
    public Movie get(@PathVariable("key") String key){
       return (Movie)redisTemplate.opsForValue().get(key);
   }
    @DeleteMapping("/delete/{key}")
    public Boolean delete(@PathVariable("key") String key){
        redisTemplate.delete(key);
        return redisTemplate.hasKey(key);//查看是否被删除,如果删除返回false,没有删除,返回true
    }

4.创建配置文件和RedisConfig配置类 

spring:
  redis:
    database: 2
    host: localhost
    port: 6379
  mvc:
    servlet:
     load-on-startup: 1
@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
        RedisTemplate<String, Object> objectObjectRedisTemplate = new RedisTemplate<>();
        objectObjectRedisTemplate.setConnectionFactory(redisConnectionFactory);

        //设置key序列化使用String字符串
        objectObjectRedisTemplate.setKeySerializer(RedisSerializer.string());
        objectObjectRedisTemplate.setHashKeySerializer(RedisSerializer.string());

        //设置value序列化为JSON格式
        GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer =
                new GenericJackson2JsonRedisSerializer();
        objectObjectRedisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer);
        objectObjectRedisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer);
        return objectObjectRedisTemplate;

    }
}

5.创建启动类

@SpringBootApplication
public class SpringbootredisApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootredisApplication.class, args);
    }

}

6.结果展示

添加

查询
 修改并查看

 删除

 SpringBoot操作Redis的五种数据类型

代码实现

    /**
     * 五种数据类型的操作
     */
    //字符串
    @GetMapping("/get/string")
    public String StringTest() {
        redisTemplate.opsForValue().set("str", "hello world!");
        String str = (String) redisTemplate.opsForValue().get("str");
        return str;
    }

    //列表
    @GetMapping("/get/list")
    public List<String> ListTest() {
        ListOperations<String, String> listOperations = redisTemplate.opsForList();
        listOperations.leftPush("list", "java");
        listOperations.leftPush("list", "python");
        listOperations.leftPush("list", "c++");
        listOperations.leftPush("list", "c");
        List<String> list = listOperations.range("list", 0, 3);
        return list;
    }

    //集合
    @GetMapping("/get/set")
    public Set<String> SetTest() {
        SetOperations<String, String> setOperations = redisTemplate.opsForSet();
        setOperations.add("set", "123456789");
        setOperations.add("set", "123456789");
        setOperations.add("set", "AK47");
        setOperations.add("set", "AK47");
        setOperations.add("set", "一个花西子币");
        setOperations.add("set", "一个花西子币");
        Set<String> set = setOperations.members("set");
        return set;
    }

    //有序集合
    @GetMapping("/get/zset")
    public Set<String> ZsetTest() {
        ZSetOperations<String, String> zSetOperations = redisTemplate.opsForZSet();
        zSetOperations.add("zset", "123456789", 1);
        zSetOperations.add("zset", "AK47", 3);
        zSetOperations.add("zset", "一个花西子币", 2);
        zSetOperations.add("zset", "旺旺", 4);
        Set<String> zset = zSetOperations.range("zset", 0, 3);
        return zset;
    }
    //哈希
    @GetMapping("get/hash")
        public void HashTest(){
        HashOperations<String,String,String> hashOperations =redisTemplate.opsForHash();
        hashOperations.put("key","hashkey","人间");
        System.out.println(hashOperations.get("key", "hashkey"));
    }

结果展示

 字符串

 列表
 无序集合

有序集合 

哈希 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐