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)导包
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注入之后
这边引入一下就直接用了