赞
踩
目录
Redis(Remote Dictionary Server)是一个开源的内存数据存储系统,被广泛用作缓存、消息代理和键值存储等用途。它具有高性能、持久化、分布式、支持多种数据结构等特点,被许多应用程序用来加速数据访问、缓解数据库负载、实现实时分析和处理等。
在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存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型。
哈希结构适合用于存储对象。列表按照插入顺序排序,可以含重复元素。集合中不能有重复元素,可用于计算交并集。有序集合中每一个元素关联一个分数,根据分数升序排序。
- 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>

步骤: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设计与实现》这本书的学习笔记。如果大家需要这本书的电子版,可以私信我~
如果有帮助你,希望可以点赞收藏转发~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。