目录
Redis入门
-
Redis简介
Redis(Remote Dictionary Server)是一个开源的内存数据存储系统,被广泛用作缓存、消息代理和键值存储等用途。它具有高性能、持久化、分布式、支持多种数据结构等特点,被许多应用程序用来加速数据访问、缓解数据库负载、实现实时分析和处理等。
-
Redis启动
在redis目录下打开cmd输入redis-server.exe redis.windows.conf开启redis的服务器,之后再打开一个cmd输入redis-cli.exe开启redis的客户端。(redis配置文件中默认没有密码,可自行设置。redis-cli.exe -h 主机 -p 端口 -a 密码)我们也可以去安装Redis 数据库的图形化界面工具Another Redis Desktop Manager,更直观的操作redis。
-
Redis中5种常用数据类型介绍
Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型。
哈希结构适合用于存储对象。列表按照插入顺序排序,可以含重复元素。集合中不能有重复元素,可用于计算交并集。有序集合中每一个元素关联一个分数,根据分数升序排序。
-
Redis常用命令
字符串类型常用命令
127.0.0.1:6379> set boy jay //set key value 设置指定key的值
OK
127.0.0.1:6379> get boy //获取指定key的值
"jay" //setex key seconds value
127.0.0.1:6379> setex girl 10 jolin //设置指定key的值 并将key的过期时间设置为seconds秒
OK
127.0.0.1:6379> get girl
"jolin"
127.0.0.1:6379> get girl
"jolin"
127.0.0.1:6379> get girl
"jolin"
127.0.0.1:6379> get girl
"jolin"
127.0.0.1:6379> get girl //时间到期了就获取不到了
(nil)
127.0.0.1:6379> setnx boy wang //setnx key value 在key不存在时设置key的值 成功返回1 失败为0
(integer) 0
127.0.0.1:6379> setnx man wang
(integer) 1
哈希操作命令
//将哈希表key 中的字段field 的值设为value
127.0.0.1:6379> hset boyfriend name xiaowang age 22 city beijing
(integer) 3
127.0.0.1:6379> hget boyfriend name //获取存储在哈希表中指定字段的值
"xiaowang"
127.0.0.1:6379> hget boyfriend age
"22"
127.0.0.1:6379> hget boyfriend city
"beijing"
127.0.0.1:6379> hdel key city //删除存储在哈希表中的指定字段 删除失败返回0 成功返回1
(integer) 0
127.0.0.1:6379> hdel boyfriend city
(integer) 1
127.0.0.1:6379> hkeys boyfriend //获取哈希表中所有字段
1) "name"
2) "age"
127.0.0.1:6379> hvals boyfriend //获取哈希表中所有值
1) "xiaowang"
2) "22"
列表操作命令
// 向左插入(头部)多个数据
127.0.0.1:6379> lpush name zhangsan lisi wangwu
(integer) 3
127.0.0.1:6379> rpush name more //向右插入(尾部) 多个数据
(integer) 4
127.0.0.1:6379> lrange name 0 -1 // lrange key start stop 获取列表指定范围内的元素 0 -1 全部
1) "wangwu"
2) "lisi"
3) "zhangsan"
4) "more"
127.0.0.1:6379> rpop name //rpop key 移除并获取列表最后一个元素
"more"
127.0.0.1:6379> lrange name 0 -1
1) "wangwu"
2) "lisi"
3) "zhangsan"
127.0.0.1:6379> llen name //llen key 获取列表长度
(integer) 3
集合操作命令
127.0.0.1:6379> sadd list1 2 4 6 8 10 //sadd key member1... 向集合中添加一个或多个数据
(integer) 5
127.0.0.1:6379> smembers list1 //smembers key返回集合中所有成员
1) "2"
2) "4"
3) "6"
4) "8"
5) "10"
127.0.0.1:6379> scard list1 //scard key 获取集合中的成员数
(integer) 5
127.0.0.1:6379> sadd list2 1 2 3 4 5 6 7 8 9 10
(integer) 10
127.0.0.1:6379> sinter list1 list2 //sinter key1 key2 返回给定所有集合的交集
1) "2"
2) "4"
3) "6"
4) "8"
5) "10"
127.0.0.1:6379> sunion list1 list2 //sunion key1 key2 返回所有给定集合的并集
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
10) "10"
127.0.0.1:6379> srem list1 2 4 6 8 //srem key member1 ... 删除集合中一个或多个成员
(integer) 4
127.0.0.1:6379> smembers list1
1) "10"
127.0.0.1:6379>
有序集合
//向有序集合添加一个或多个成员 zadd key score1 member1
127.0.0.1:6379> zadd zset 0.1 zhangsan 0.2 lisi 0.3 wangwu
(integer) 3
127.0.0.1:6379> zrange zset 0 -1 //zrange key start stop 返回索引区间的成员
1) "zhangsan"
2) "lisi"
3) "wangwu"
127.0.0.1:6379> zincrby zset 1.0 zhangsan //zincrby key increment member 对指定成员分数加法
"1.1000000000000001"
127.0.0.1:6379> zrem zset zhangsan //移除成员
(integer) 1
127.0.0.1:6379> zrange zset 0 -1
1) "lisi"
2) "wangwu"
127.0.0.1:6379>
通用命令
127.0.0.1:6379> keys * //keys pattern 查找所有符合给定模式的key
1) "dish_20"
2) "SHOP_STATUS"
3) "name"
4) "list1"
5) "dish_11"
6) "boy"
7) "man"
8) "dish_12"
9) "setmealCache::13"
10) "list2"
11) "zset"
12) "dish_21"
13) "boyfriend"
14) "dish_18"
15) "dish_19"
16) "dish_16"
17) "users::xiaowang"
127.0.0.1:6379> exists boy //检查给定key是否存在
(integer) 1
127.0.0.1:6379> type boy //返回key所存储的值的类型
string
127.0.0.1:6379> del key123
(integer) 0
127.0.0.1:6379> del boy //删除存在的key
(integer) 1
127.0.0.1:6379> exists boy
(integer) 0
127.0.0.1:6379>
-
Spring Data Redis使用方式
步骤:1. 导入Spring Data Redis的maven坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2. 配置Redis数据源
redis:
host: localhost
port: 6379 //主机和端口是默认值可以不用设置
password: //如果有设置密码需要配置
database: //redis 有许多数据库 可以选择默认为0
3. 编写配置类,创建RedisTemplate对象
@Configuration
@Slf4j
public class RedisConfiguration {
@Bean
//先注入工厂对象
public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory){
RedisTemplate redisTemplate=new RedisTemplate();
//连接工厂对象
redisTemplate.setConnectionFactory(connectionFactory);
//设置redis key的序列化器
redisTemplate.setKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
}
4. 通过RedisTemplate对象操作Redis
Redistemplate给我们封装五类接口,让我们操作对应类型的数据。通过调用方法来存储和获取数据库的数据,方法很多这里就不详细说明,大家可以去搜索,其实直接.一下大家就知道怎么用了。
店铺营业状态设置功能
根据产品原型,我们要设计三个接口:设置营业状态、管理端查询营业状态、用户端查询营业状态。由于有客户端和服务端,如果两边的类都叫做ShopController会出现分歧,我们可以在
@RestController("userShopController")添加别名。
设置营业状态
用什么方法请求?传入什么参数?返回什么数据?
该方法使用put方式,通过路径参数status,无额外的数据需要返回。
在Redis中使用key为SHOP_STATUS来存储营业状态。
@PutMapping("/{status}")
@ApiOperation("设置店铺状态")
public Result setStatus(@PathVariable Integer status){
log.info("设置店铺的营业状态:{}",status == 1 ?"营业中":"打样中");
ValueOperations valueOperations = redisTemplate.opsForValue();
valueOperations.set("SHOP_STATUS",status);
return Result.success();
}
查询营业状态
用什么方法请求?传入什么参数?返回什么数据?
该方法使用get方式,无需前端传数据,返回status给前端。
@GetMapping("/status")
@ApiOperation("服务端获取店铺状态")
public Result<Integer> getStatus(){
ValueOperations valueOperations = redisTemplate.opsForValue();
Integer shopStatus = (Integer) valueOperations.get("SHOP_STATUS");
return Result.success(shopStatus);
}
后期,我可能会写一篇关于《Redis设计与实现》这本书的学习笔记。如果大家需要这本书的电子版,可以私信我~
如果有帮助你,希望可以点赞收藏转发~