ftp上传后没有网站,北京公司注册流程及需要的材料,苏州新区网站制作公司,天津网站建设模板Redis
简介
Redis是一个基于内存的key-value结构数据库
基于内存存储#xff0c;读写性能高适合存储热点数据#xff08;热点商品、资讯、新闻#xff09;企业应用广泛
基础操作
启动 在redis安装目录中打开cmd#xff0c;输入如上图指令即可启动#xff0c;按下crtl…Redis
简介
Redis是一个基于内存的key-value结构数据库
基于内存存储读写性能高适合存储热点数据热点商品、资讯、新闻企业应用广泛
基础操作
启动 在redis安装目录中打开cmd输入如上图指令即可启动按下crtlc停止
连接
保证服务端启动时在cmd命令行中输入redis-cli.exe -h 用户名 -p 端口号 -a 密码 数据类型 常用命令
字符串操作命令
SET key value 设置指定key的值GET key 获取指定key的值SETEX key seconds value 设置指定key的值并将key的过期时间设为seconds秒SETNX key value 只有key不存在时设置key的值key已存在则无法设置
哈希操作命令Hash Map
Redis hash 是一个String类型的field和value的映射表hash特别适合用于存储对象常用命令
这些命令中的key是哈希表名field是字段名value是值
HSET key field value 将哈希表key中的字段field的值设为valueHGET key field value 获取存储在哈希表中的指定字段HDEL key field 删除存储在哈希表中的指定字段HKEYS key 获取哈希表中所有字段HVALS key 获取哈希表中所有值
列表操作命令(Linked List)
Redis列表是简单的String列表按照插入顺序排序常用命令
LPUSH key value1 [value2] 将一个或多个值插入到列表头部LRANGE key start stop 获取列表指定范围内的元素RPOP key 移除并获取列表最后一个元素LLEN key 获取列表长度
集合操作命令(Set)
Reids set 是String类型的无序集合。集合成员是唯一的集合中不能出现重复的数据常用命令
SADD key member1 [member2] 向集合添加一个或多个成员SMEMBERS key 返回集合中的所有成员SCARD key 获取集合的成员数SINTER key1 [key2] 返回给定所有集合的交集SUNION key1 [key2] 返回所有给定集合的并集SREM key member1 [member2] 删除集合中一个或多个成员
有序集合操作命令
Redis有序集合是String类型元素的集合且不允许有重复成员集合中的元素是string类型每个元素有一个double类型的分数会自动根据分数进行排序。每个元素都会关联一个double类型的分数常用命令member 是元素score 是分数
ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合中指定区间内的成员ZINCRBY key increment member 有序集合中对指定成员的分数加上增量incrementZREM key member [member…] 移除有序集合中的一个或多个成员
通用命令
Reids的通用命令是不分数据类型的都可以使用的命令
KEYS pattern 查找所有符合给定模式(pattern)的keyEXISTS key 检查给定key是否存在TYPE key 返回key所储存的数据类型DEL key 该命令用于在key存在时删除key Java操作Redis
在Java项目中。可以使用Spring Data Redis来简化操作
步骤
1.导入Spring Data Redis的maven坐标
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId
/dependency
2、配置Redis数据源
spring:redis:host: ${sky.redis.host}port: ${sky.redis.port}auth: ${sky.redis.auth}database: ${sky.redis.database}
sky:redis:host: localhostport: 6379auth: 325523 #密码database: 0 #指定使用0号数据源
3、编写配置类创建RedisTemplate对象
package com.sky.config;import lombok.extern.slf4j.Slf4j;
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.serializer.StringRedisSerializer;Configuration
Slf4j
public class RedisConfiguration {Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){log.info(开始创建Reids模版对象...);RedisTemplate redisTemplate new RedisTemplate();//设置reids的连接工厂对象redisTemplate.setConnectionFactory(redisConnectionFactory);//设置redis key序列化器redisTemplate.setKeySerializer(new StringRedisSerializer());return redisTemplate;}
}4、通过ReidsTemplate对象操作Redis
package com.sky.test;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.*;import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;SpringBootTest
public class SpringDataRedisTest {Autowiredprivate RedisTemplate redisTemplate;Testpublic void testRedisATemplate(){System.out.println(redisTemplate);ValueOperations valueOperations redisTemplate.opsForValue();HashOperations hashOperations redisTemplate.opsForHash();ListOperations listOperations redisTemplate.opsForList();SetOperations setOperations redisTemplate.opsForSet();ZSetOperations zSetOperations redisTemplate.opsForZSet();}/*** 操作字符串数据类型*/Testpublic void testString(){redisTemplate.opsForValue().set(city,北京);String city (String) redisTemplate.opsForValue().get(city);System.out.println(city);redisTemplate.opsForValue().set(code,1234,3, TimeUnit.MINUTES);//设置3分钟后过期redisTemplate.opsForValue().setIfAbsent(lock,1);//如果不存在才能设置redisTemplate.opsForValue().setIfAbsent(lock,2);}Testpublic void testHash(){HashOperations hashOperations redisTemplate.opsForHash();hashOperations.put(100,name,tom);//向哈希中插入键值对hashOperations.put(100,age,20);String name (String)hashOperations.get(100, name);//根据键获取值System.out.println(name);Set keys hashOperations.keys(100);//返回哈希中的所有键System.out.println(keys);List values hashOperations.values(100);//返回哈希中的所有值System.out.println(values);hashOperations.delete(100,age);//根据键删除键值对}
}Spring Cache
简介
Spring Cache是一个框架实现了基于注解的缓存功能只需要简单地加一个注解就能实现缓存功能
Spring Cache提供了一层抽象底层可以切换不同的缓存实现例如
EHCacheCaffeineRedis
在pom.xml中配置相关坐标即可使用Spring Cache框架
常用注解
EnableCaching开启注解缓存功能通常加在启动类上Cacheable在方法执行前先查询缓存中是否有数据如果有数据则世界返回缓存数据如果没有缓存数据调用方法并将方法返回值放到缓存中CachePut将方法的返回值放到缓存中CacheEvict将一条或多条数据从缓存中删除
这些注解本质是通过代理对象执行的 项目应用
思路
导入Spring Cache 和Redis的相关maven坐标在启动类上加入EnableCaching注解开启缓存注解功能在用户端接口SetmealController的list方法上加入Cacheable注解在管理端接口SetmealController的save、delete、update等方法上加入CacheEvict注解 新增操作需要精确清理缓存新增哪个就清理哪个 删、改操作需要清空全部缓存 查询操作先在缓存中查缓存中没有再去数据库中查并把查询结果放入缓存中 代码实现
用户端接口SetmealController
/*** 条件查询* param categoryId* return*/GetMapping(/list)ApiOperation(根据分类id查询套餐)Cacheable(cacheNames setmealCache,key #categoryId)//keysetmealCache::categoryIdpublic ResultListSetmeal list(Long categoryId) {Setmeal setmeal new Setmeal();setmeal.setCategoryId(categoryId);setmeal.setStatus(StatusConstant.ENABLE);ListSetmeal list setMealService.list(setmeal);return Result.success(list);}
管理端接口SetmealController
/*** 新增套餐* param setmealDTO* return*/PostMappingApiOperation(新增套餐)CacheEvict(cacheNames setmealCache,key #setmealDTO.categoryId)public Result save(RequestBody SetmealDTO setmealDTO){log.info(新增套餐{},setmealDTO);setMealService.saveWithDish(setmealDTO);return Result.success();}/*** 批量删除套餐* param ids* return*/DeleteMappingApiOperation(批量删除套餐)CacheEvict(cacheNames setmealCache,allEntries true)//清空所有缓存public Result delete (RequestParam ListLong ids){log.info(批量删除套餐{},ids);setMealService.delete(ids);return Result.success();}/*** 修改套餐* param setmealDTO* return*/PutMappingApiOperation(修改套餐)CacheEvict(cacheNames setmealCache,allEntries true)//清空所有缓存public Result update(RequestBody SetmealDTO setmealDTO){setMealService.update(setmealDTO);return Result.success();}/*** 起售停售菜品* param status* param id* return*/PostMapping(/status/{status})ApiOperation(起售停售菜品)CacheEvict(cacheNames setmealCache,allEntries true)//清空所有缓存public Result updateStatus(PathVariable Integer status,Long id){setMealService.updateStatus(status,id);return Result.success();}