Redis

1、关系型与非关系型数据库对比

2、非关系型数据库优点及应用场景

分布式ID

3、BitMap 存二进制数据(0101010)、HyperLogLog(数据统计(少))

4、redis的命令参数

(1)String字符串命令

set 设定值 SET key "value"
setnx key不存在时设置key值
setex 为指定的 key 设置值及其过期时间,存在会替换值 SETEX mykey 60 redis 单位秒
get 获取指定的值
incr 自增1  incr hello:lht:page_view
decr 自减1 decr hello:lht:page_view
INCRBY  INCRBY rank 20 增加20

(2)key键命令

exists key  判断键是否存在
expire key time 给键设置过期时间
del key 删除键
ttl 键 查看键的有效时间

(3)List命令

关注,收藏,点赞,队列

lpush 将一个或多个值插入到列表头部
rpush 在列表中添加一个或多个值
lpop 移出并获取列表的第一个元素
rpop 移除并获取列表最后一个元素
llen 获取列表长度
lrange 获取列表指定范围内的元素

(4)set命令

sadd 向集合添加一个或多个成员
spop 移除并返回集合中的一个随机元素
scard 获取集合的成员数
sdiff 返回给定所有集合的差集
sunion 返回所有给定集合的并集
sinter 返回给定所有集合的交集

 (5)zset 有序不重复

应用:排行榜、热搜

Zincrby 键 分数 值 zincrby hot:search 1 '葫芦娃'
Zrevrange 返回有序集中,指定区间内的成员(按分数值递减(从大到小)来排列)
ZREVRANGE salary 0 -1

(6)Hash

 5、redis原始语句

6、问题

​​​​​​​

7、java链接redis的客服端

8、日志输出

9、键通过RestTeplate操作,值通过ValueOperations及以下去操作

10、redis配置

(1)导包

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

(2)配置序列化

package com.smart.community.youth.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {

    /**
     * 序列化配置
     * json序列化 jdk的序列化
     * @param connectionFactory
     * @return
     */
    @Bean
    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory connectionFactory){
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();

        redisTemplate.setConnectionFactory(connectionFactory);

        /**
         * 四个设置
         * 1 键的序列化
         * 2 值的序列
         */
        StringRedisSerializer keyRedisSerializer = new StringRedisSerializer();
        redisTemplate.setStringSerializer(keyRedisSerializer);
        redisTemplate.setHashKeySerializer(keyRedisSerializer);
        redisTemplate.setKeySerializer(keyRedisSerializer);

        GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
        redisTemplate.setHashKeySerializer(genericJackson2JsonRedisSerializer);
        redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer);
        return redisTemplate;


    }

    @Bean
    public ValueOperations<String, Object> valueOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForValue();
    }

}

(3)配置yml配置文件

server:
  port: 8089

spring:
  redis:
    host: 127.0.0.1
    database: 0
    port: 6379
    password: ""
    # 默认单位毫秒
    timeout: 5s
    # 连接池
    jedis:
      pool:
        #  最大连接数
        max-active: 10
        #  空闲连接数数
        max-idle: 8
        # 空闲最小链接数
        min-idle: 2
        max-wait: 3s
  profiles:
    active: "db,dev,swagger"

logging:
  level:
    "com.smart.community.youth": debug

(4)测试对象

package com.smart.community.youth.vo;

import lombok.Data;

@Data
public class UserVo {
    private String username;
}

(5)测试

package com.zw.data.redis.mapper;

import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;

import javax.annotation.Resource;
import java.time.Duration;
import java.util.concurrent.TimeUnit;

@SpringBootTest
@Slf4j
public class KeyRedisTemplateTest {
    @Resource
    RedisTemplate<String, Object> redisTemplate;

    @Test
    public void hasKey() {
        Boolean b = redisTemplate.hasKey("test:key:exists");
        Boolean delete = redisTemplate.delete("test:key:exists");
        redisTemplate.expire("test:key:exists", Duration.ofSeconds(1));
        redisTemplate.expire("test:key:exists", 1, TimeUnit.SECONDS);
        log.debug("" + b);
    }
}
package com.zw.data.redis.mapper;

import com.zw.data.redis.vo.SysUserVo;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;

import javax.annotation.Resource;
import java.time.Duration;

@SpringBootTest
public class StringRedisTemplateTest {
    @Resource
    RedisTemplate<String, Object> redisTemplate;
    @Resource
    ValueOperations<String, Object> valueOperations;

    // 设置永不过期
    // 设置过期时间  nx
    // 存在不设置值
    // 不存在就设置值
    @Test
    public void setTest() {
        valueOperations.set("test:str:set", "永不过期");
        valueOperations.set("test:str:set:ex", "设置过期时间", Duration.ofMinutes(10));
        // 键不存在则设置值
        valueOperations.setIfAbsent("test:str:set:nx", "键不存在则设置值");
        // 修改操作
        valueOperations.setIfPresent("test:str:set:nx", "键不存在则设置值");

        SysUserVo sysUserVo = new SysUserVo();
        sysUserVo.setUsername("admin");
        valueOperations.set("test:str:set:obj", sysUserVo);
    }

    @Test
    public void incr() {
        Long num = valueOperations.increment("test:str:set:incr");
        Long num1 = valueOperations.decrement("test:str:set:incr");

    }


}

11、Duration 时间类使用

还有1d(一天) 2h(2小时)那些

12、缓存的原理

通过AOP去缓存里面取,取key 类名+方法名+参数+特殊区分符

13、配置了Bean注入之后

这边引入一下就直接用了

14、把RedisTemplate那些方法封装到DAO中去

相关推荐

  1. <span style='color:red;'>Redis</span>

    Redis

    2024-01-20 18:32:02      49 阅读
  2. <span style='color:red;'>Redis</span>

    Redis

    2024-01-20 18:32:02      119 阅读
  3. <span style='color:red;'>Redis</span>

    Redis

    2024-01-20 18:32:02      33 阅读
  4. <span style='color:red;'>redis</span>

    redis

    2024-01-20 18:32:02      51 阅读
  5. <span style='color:red;'>Redis</span>

    Redis

    2024-01-20 18:32:02      43 阅读
  6. <span style='color:red;'>redis</span>

    redis

    2024-01-20 18:32:02      51 阅读
  7. <span style='color:red;'>Redis</span>

    Redis

    2024-01-20 18:32:02      46 阅读
  8. <span style='color:red;'>redis</span>

    redis

    2024-01-20 18:32:02      51 阅读
  9. Redis

    2024-01-20 18:32:02       44 阅读
  10. <span style='color:red;'>redis</span>

    redis

    2024-01-20 18:32:02      46 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-20 18:32:02       7 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-20 18:32:02       6 阅读
  3. 在Django里面运行非项目文件

    2024-01-20 18:32:02       5 阅读
  4. Python语言-面向对象

    2024-01-20 18:32:02       9 阅读

热门阅读

  1. RHCE 【DNS服务主从服务器】

    2024-01-20 18:32:02       47 阅读
  2. html css js 开发一个猜数字游戏

    2024-01-20 18:32:02       48 阅读
  3. Jira REST API_获取创建issue时的字段配置

    2024-01-20 18:32:02       45 阅读
  4. windows虚拟主机和linux虚拟主机的区别有哪些?

    2024-01-20 18:32:02       53 阅读
  5. [Python进阶] 正则表达式介绍

    2024-01-20 18:32:02       38 阅读
  6. PIL、cv2、numpy,和pytorch(torch)之间的转换

    2024-01-20 18:32:02       40 阅读
  7. 第五讲_ArkTS装饰器(二)

    2024-01-20 18:32:02       44 阅读
  8. AcWing:4662. 因数平方和

    2024-01-20 18:32:02       46 阅读
  9. Deepin/Ubuntu_查看磁盘空间大小

    2024-01-20 18:32:02       44 阅读
  10. CCC数字钥匙标准3.0版本解读(24)

    2024-01-20 18:32:02       42 阅读
  11. STM32F103C8驱动MPU6050姿态与tofsense报警 (六)

    2024-01-20 18:32:02       48 阅读
  12. 【C++】特殊类 | 单例模式

    2024-01-20 18:32:02       39 阅读
  13. 【ROS2】实现自定义服务接口

    2024-01-20 18:32:02       34 阅读