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

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

分布式ID

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

4、redis的命令参数

(1)String字符串命令

set设定值 SET key “value”
setnxkey不存在时设置key值
setex为指定的 key 设置值及其过期时间,存在会替换值SETEX mykey 60 redis 单位秒
get获取指定的值
incr自增1 incr hello:lht:page_view
decr自减1 decr hello:lht:page_view
INCRBYINCRBY 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)导包

org.springframework.bootspring-boot-starter-data-redis

(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;@Configurationpublic class RedisConfig {/** * 序列化配置 * json序列化 jdk的序列化 * @param connectionFactory * @return */@Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory){RedisTemplate 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;}@Beanpublic ValueOperations valueOperations(RedisTemplate redisTemplate) {return redisTemplate.opsForValue();}}

(3)配置yml配置文件

server:port: 8089spring:redis:host: 127.0.0.1database: 0port: 6379password: ""# 默认单位毫秒timeout: 5s# 连接池jedis:pool:#最大连接数max-active: 10#空闲连接数数max-idle: 8# 空闲最小链接数min-idle: 2max-wait: 3sprofiles:active: "db,dev,swagger"logging:level:"com.smart.community.youth": debug

(4)测试对象

package com.smart.community.youth.vo;import lombok.Data;@Datapublic 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@Slf4jpublic class KeyRedisTemplateTest {@ResourceRedisTemplate redisTemplate;@Testpublic 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;@SpringBootTestpublic class StringRedisTemplateTest {@ResourceRedisTemplate redisTemplate;@ResourceValueOperations valueOperations;// 设置永不过期// 设置过期时间nx// 存在不设置值// 不存在就设置值@Testpublic 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);}@Testpublic 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中去