赞
踩
#将6379端口开放
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload
#修改redis.conf文件中的配置
bind:172.0.0.1 #将此行注释掉,表示不限制ip
requirepass 123456 #设置auth密码为123456
#/dae... 改为yes 表示可以后台启动
src/redis-server ./redis.conf #修改之后启动服务需要加载conf 才可以后台启动
#在另一台电脑上的redis-cli所在目录访问
./redis-cli -h 172.16.124.129(虚拟机ip地址) -p 6379(端口号) -a 123456(密码验证)
k-v结构
的数据,其中key是字符串类型,value有5种常用的数据类型
字符串String;哈希Hash;列表List;集合Set;有序集合Sorted Set
。SET key value | 设置指定key的值 |
---|---|
GET key | 获取指定key的值 |
SETEX key seconds value | 设置指定key的值,并将key值的过期时间设为seconds秒 |
SETNX key value | 只有key不存在时设置key的值 |
https://redis.net.cn
中会有更多教程
HSET key field value | 将哈希表key中的字段field的值设为value |
---|---|
HGET key field | 获取存储在哈希表中指定字段的值 |
HDEL key field | 删除存储在哈希表中的指定字段 |
HKEYS key | 获取哈希表中指定key的所有的字段 |
HVALS key | 获取哈希表中指定key的所有的值 |
HGETALL key | 获取在哈希表中指定key的所有字段和值 |
LPUSH key value1 [value2…] | 将一个或者多个值插入到列表头部 |
---|---|
LRANGE key start stop | 获取列表指定范围内的元素 -1 代表查所有 |
RPOP key | 移除并获取列表最后一个元素 |
LLEN key | 获取列表的长度 |
BRPOP key1 [key2] timeout | 移除并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止 |
Redis set 是String类型的无序集合
,集合成员是唯一的,这就意味着集合中不能出现重复的数据。
SADD key member1 [member2]… | 向集合中添加一个或多个成员 |
---|---|
SMEMBER key | 返回集合中的所有成员 |
SCARD key | 获取集合的成员数 |
SINTER key1 [key2] | 返回所有给定集合的交集 |
SUNION key1 [key2] | 返回所有给定集合的并集 |
SDIFF key1 [key2] | 返回所有给定集合的差集 |
SREM key member1 [menber2] | 移除集合中一个或者多个成员 |
Redis sorted set 有序集合
是string类型元素的集合,不重复。
每个元素会关联一个double类型的分数(score)
,redis正式通过分数来为集合中的成员进行小到大的排序。
成员唯一,但是分数可以重复。
ZADD key score1 member1 [score2 member2] | 向有序集合中添加一个或者多个成员 或者更新已经存在成员的分数 |
---|---|
ZRANGE key start stop [withscores] | 通过索引区间返回有序集合中指定区间的成员 |
ZINCRBY key increment member | 有序集合中对指定成员的分数加上增量increment |
ZREM key member [member …] | 移除有序集合中的一个或多个成员 |
KEYS pattern #查找所有符合给定模式的key
EXISTS key #检查给定key是否存在
TYPE key #返回key所储存的值的类型
TTL key #返回给定key的剩余生存时间(time to live),以秒s为单位
DEL key #该命令用于在key存在时,删除key
添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
yml
配置文件
redis:
host: 172.16.124.130 #远程连接的ip 修改了固定的ip地址
port: 6379 #端口
password: 123456 #密码
database: 0 #0号数据库
timeout: 3000
cache:
redis:
time-to-live: 1800000 #设置缓存的过期时间30分钟
在config目录下编写RedisConfig配置类
,重新覆盖序列化的配置,防止乱码的情况发生。
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
// 默认的Key序列华器为: JdkSerializationRedisSerializer() 可能会出现类似乱码的符号
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(redisConnectionFactory);
return redisTemplate;
}
}
在需要添加redis缓存的Controller
中引入RedisTemplate
的自动装配。
@Autowired
private RedisTemplate redisTemplate;
具体逻辑
将用户登录页面的验证码
存入redis
redisTemplate.opsForValue().set(phone,code,5, TimeUnit.MINUTES);
//以电话为key,验证码为值,5分钟有效期
在查询,添加,修改,删除
的操作中都需要操作redis
查询
:先查询redis中的缓存,没有的话再查询数据库,并存入缓存。
List<DishDto> dishDtoList = null;
//动态构造key
String key = "dish_"+dish.getCategoryId()+"_"+dish.getStatus();
//先从redis中获取缓存数据
dishDtoList = (List<DishDto>) redisTemplate.opsForValue().get(key);
if (dishDtoList != null){
//若存在,则直接返回,无需查询数据库
return R.success(dishDtoList);
}
//若不存在,则先构造条件查询数据库,最后再存到redis中
...查询数据库...
//查询完毕,将查询出的数据存储到redis缓存中。
redisTemplate.opsForValue().set(key,dishDtoList,60, TimeUnit.MINUTES);
//60分钟的有效期
return R.success(dishDtoList);
添加、修改、删除
操作完成时,要清除所有缓存(比较保险),或清除操作的数据的缓存(比较高效)。
//清理所有的缓存
Set keys = redisTemplate.keys("dish_*");
redisTemplate.delete(keys);
/*------------------上下选其一---------------------------*/
//清理添加菜品所在分类的缓存
String key = "dish_"+dishDto.getCategoryId()+"_1";
redisTemplate.delete(key);
添加依赖(上面的data-redis也是需要的)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
主启动类上加注解@EnableCaching
以开启缓存注解功能的使用。
@Slf4j
@ServletComponentScan //扫描@WebFilter注解的类
@SpringBootApplication
@EnableTransactionManagement //开始事务注解的支持,对于操作多张表的操作需要开始事务注解
@EnableCaching //开启spring-cache的注解方式的缓存功能
public class DemoSpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(ReggieTakeOutApplication.class, args);
//log需要与lombok提供的@Slf4j一起使用
log.info("项目启动成功!!!");
}
}
在方法上添加注解,cacheName可以自己设置
//执行方法时清除所有缓存(增删改)
@CacheEvict(value = "cacheName", allEntries = true)
//执行方法时根据设置的key去查询,如果缓存没有则从数据库中查询,并添加至缓存。(查)
@Cacheable(value = "cacheName", key = "#id")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。