1.Redis概述
Redis是一种NoSql(NoSQL,泛指非关系型的数据库)数据库,区别于关系数据库,它们不保证关系数据的ACID特性。
Redis以内存为主要存储介质,通过将数据存储在内存中实现了快速的读写操作。同时,Redis也支持将数据持久化到磁盘,以保证数据的持久性。
1.1 Redis特点
高性能 | Redis使用内存作为主要存储介质,可以实现快速的读写操作,适合处理高并发场景(读的速度是220000次/s,写的速度是162000次/s ) |
丰富的数据结构 | Redis支持多种数据结构,适用于不同的数据存储和操作需求 |
持久化 | Redis支持将数据持久化到磁盘,以保证数据的持久性 |
原子性 | Redis的很多操作都是原子性的,要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作通过事务或Lua脚本,通过MULTI和EXEC指令包起来,也能保证操作的原子性 |
分布式支持 | Redis提供主从复制和哨兵机制,支持构建分布式系统,提高系统的可用性和可扩展性 |
1.2 Redis数据类型
String(数字也存储为该类型)、List、Hash、Set、ZSet
1.3 Redis操作
连接别人的redis
redis-cli -h 主机地址 -p 6379
字符串操作 | |
SET key value 设置键值对 | SET name "John" |
GET key 获取指定键的值 | GET name |
DEL key 删除指定键 | DEL name |
INCR key 将键对应的值加1 | INCR counter |
APPEND key value 将值追加到指定键的值的末尾 | APPEND message "Hello, world!" |
列表操作 | |
LPUSH key value 将值插入列表的头部 | LPUSH list 1 |
RPUSH key value 将值插入列表的尾部 | RPUSH list 2 |
LPOP key 移除并返回列表的第一个元素 | LPOP list |
RPOP key 移除并返回列表的最后一个元素 | RPOP list |
LRANGE key start stop 获取列表指定范围内的元素 | LRANGE list 0 -1 |
哈希操作 | |
HSET key field value 设置哈希表中指定字段的值 | HSET user id 1 |
HGET key field 获取哈希表中指定字段的值 | HGET user id |
HDEL key field 删除哈希表中指定字段 | HDEL user id |
HGETALL key 获取哈希表中所有字段和值 | HGETALL user |
集合操作 | |
SADD key member 向集合中添加成员 | SADD set "member1" |
SMEMBERS key 获取集合中的所有成员 | SMEMBERS set |
SREM key member 从集合中移除成员 | SREM set "member1" |
有序集合操作 | |
ZADD key score member 向有序集合中添加成员及其分数 | ZADD leaderboard 100 "John" |
ZRANGE key start stop 获取有序集合指定范围内的成员 | ZRANGE leaderboard 0 -1 |
2. 项目中操作Redis
2.1 导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.2 配置连接
spring:
redis:
host: localhost
port: 6379
jedis:
pool:
max-idle: 10 #最大空闲连接数
min-idle: 0 #最小空闲连接数
max-wait: -1ms #最大等待连接时间 -1表示一直等
max-active: 100 #最大连接数
cache:
type: redis
2.3 配置类
2.4 通过注解自动操作
2.4.1 @Cacheable
标记在一个方法上,也可以标记在一个类上。主要是缓存标注对象的返回结果,标注在方法上缓存该方法的返回值,标注在类上,缓存该类所有的方法返回值。
@Cacheable(value = "productsCache", key = "#productId")
public Product getProductById(Long productId) {
// 从数据库或其他数据源中获取产品信息
return product;
}
value:指定缓存的名称或缓存管理器的名称
key:指定用于唯一标识缓存条目的键。可以使用 SpEL 表达式来动态生成键。
condition:指定一个SpEL 表达式,当条件满足时才进行缓存。默认始终缓存结果。
2.4.2 @CacheEvict
从缓存中移除相应数据
2.4.3 @Caching
使用 @Caching 注解,可以将多个缓存操作注解组合在一起,一次性应用到方法上
@Caching(evict = {
@CacheEvict(value = "findAll",allEntries = true),
@CacheEvict(value = "findById",key = "#id") //findById::1001
})
2.5 利用RedisTemplate手动操作
@Resource
private RedisTemplate redisTemplate;
@Transactional
@Override
public Boolean add(Kill kill) {
boolean res = killMapper.add(kill);
if(res){
//放redis
redisTemplate.opsForHash().put("kills",kill.getId()+"",kill);
}
return res;
}