技术栈入门-------Redis

使用redis的准备工作

1、在虚拟机上安装redis(前提是安装了docker容器)

技术栈入门-------Redis_第1张图片

上面使用到的命令

docker pull redis
mkdir -p /mydata/redis/conf

docker run -p 6379:6379 --name redis -v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf

2、修改reids.conf配置文件让redis中的数据持久化

同上mysql配置文件一样,输入appendonly yes后保存

编辑

最后重启redis

这样redis的数据就从内存中存到了磁盘中

3、常用操作

(1)使用redis 镜像执行redis-cli 命令连接

进到了redis容器内部

docker exec -it redis redis-cli

技术栈入门-------Redis_第2张图片

4、添加redis依赖


  org.springframework.boot
  spring-boot-starter-data-redis

5、application.properties配置文件里配置redis主机地址

spring.redis.host=192.168.241.128

本商城项目哪里用到了redis

秒杀服务

1、秒杀服务中定时上架秒杀商品的uploadSeckillSkuLatest3Days方法的实现中用到

(1)注入StringRedisTemplate (其实就是java中操作redis的类)

   @Autowired
    private StringRedisTemplate redisTemplate;

(2)定义了三个存入redis的前缀

//秒杀活动的前缀    
private final String SESSION__CACHE_PREFIX = "seckill:sessions:";
//秒杀商品的前缀
private final String SECKILL_CHARE_PREFIX = "seckill:skus";
//秒杀库存的前缀
private final String SKU_STOCK_SEMAPHORE = "seckill:stock:";    //+商品随机码

(3)常用的操作

1>判断redis中有没有这个key,有就返回true,没有就返回false

  Boolean hasKey = redisTemplate.hasKey(key);

2> 以集合的方式向左边批量添加元素(其实就是给指定的key值批量添加多个value值)

 redisTemplate.opsForList().leftPushAll(key,skuIds);

3>给redis中HashMap结构的Hash值绑定操作(也就是以后根据这个Hash值来增删改查)

//SECKILL_CHARE_PREFIX=seckill:skus(seckill:skus就是Hash值)
BoundHashOperations operations = 
     redisTemplate.boundHashOps(SECKILL_CHARE_PREFIX);

4>HashMap结构存入redis缓存和取出key对应的value值

//HashMap结构存入redis缓存
operations.put(key,value);
//HashMap结构取出key对应的value值
String skuInfoValue = hashOps.get(key);

5> 模糊获取所有的keys

//从Redis中查询到所有key以seckill:sessions开头的所有数据
//(其实就是查找所有redis里的秒杀活动的信息)
Set keys = redisTemplate.keys(SESSION__CACHE_PREFIX + "*");

6> 取出这个key对应的所有值

//2、获取这个秒杀场次需要的所有商品信息也就是key对应的value(这个key是当前秒杀活动的key)
//-100到100表示取出所有的key对应的值
List range = redisTemplate.opsForList().range(key, -100, 100);

7> 根据多个key来获取多个key对应的值

//这个keys是List集合
List listValue = hasOps.multiGet(keys);

8>具体对象和Json字符串互转(注意这里是需要导入下面的依赖才能用)

//把Json字符串转为具体的对象
具体对象 具体对象实例 = JSON.parseObject(Json字符串, 具体对象.class);
//下面是把items的Json字符串转为SeckillSkuRedisTo对象
例如: SeckillSkuRedisTo redisTo = JSON.parseObject(items, SeckillSkuRedisTo.class);
 
//把具体对象转为Json字符串(redisTo是具体对象的实例)
 String seckillValue = JSON.toJSONString(redisTo);

  com.alibaba
  fastjson
  1.2.72
  compile

9>setIfAbsent方法

//setIfAbsent方法如果为空就set值,并返回1,如果存在(不为空)不进行操作,并返回0
Boolean aBoolean = redisTemplate.opsForValue()
.setIfAbsent(key, value, 超时时间, TimeUnit.MILLISECONDS);

你可能感兴趣的:(谷粒商城笔记,docker,java,容器)