redis常用5种数据类型和基础操作命令及在springboot中的两种使用方式

redis

远程连接redis

#将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(密码验证)

redis数据类型及对应的操作命令

  • redis存储的是k-v结构的数据,其中key是字符串类型,value有5种常用的数据类型
    • 字符串String;哈希Hash;列表List;集合Set;有序集合Sorted Set
1、String
SET key value设置指定key的值
GET key获取指定key的值
SETEX key seconds value设置指定key的值,并将key值的过期时间设为seconds秒
SETNX key value只有key不存在时设置key的值

https://redis.net.cn中会有更多教程

2、Hash
HSET key field value将哈希表key中的字段field的值设为value
HGET key field获取存储在哈希表中指定字段的值
HDEL key field删除存储在哈希表中的指定字段
HKEYS key获取哈希表中指定key的所有的字段
HVALS key获取哈希表中指定key的所有的值
HGETALL key获取在哈希表中指定key的所有字段和值
3、List
LPUSH key value1 [value2…]将一个或者多个值插入到列表头部
LRANGE key start stop获取列表指定范围内的元素 -1 代表查所有
RPOP key移除并获取列表最后一个元素
LLEN key获取列表的长度
BRPOP key1 [key2] timeout移除并获取列表的最后一个元素,
如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
4、Set

Redis set 是String类型的无序集合,集合成员是唯一的,这就意味着集合中不能出现重复的数据。

SADD key member1 [member2]…向集合中添加一个或多个成员
SMEMBER key返回集合中的所有成员
SCARD key获取集合的成员数
SINTER key1 [key2]返回所有给定集合的交集
SUNION key1 [key2]返回所有给定集合的并集
SDIFF key1 [key2]返回所有给定集合的差集
SREM key member1 [menber2]移除集合中一个或者多个成员
5、sorted set

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

redis 两种方式的使用

1、redisTemplate
  1. 添加依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    
  2. 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分钟
    
  3. 在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;
        }
    }
    
  4. 在需要添加redis缓存的Controller中引入RedisTemplate的自动装配。

    @Autowired
    private RedisTemplate redisTemplate;
    
  5. 具体逻辑

    1. 将用户登录页面的验证码存入redis

      redisTemplate.opsForValue().set(phone,code,5, TimeUnit.MINUTES); 
      //以电话为key,验证码为值,5分钟有效期
      
    2. 查询,添加,修改,删除的操作中都需要操作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);
      
2、注解(spring cache)
  1. 添加依赖(上面的data-redis也是需要的)

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>
    
  2. 主启动类上加注解@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("项目启动成功!!!");
        }
    }
    
  3. 在方法上添加注解,cacheName可以自己设置

    //执行方法时清除所有缓存(增删改)
    @CacheEvict(value = "cacheName", allEntries = true) 
    //执行方法时根据设置的key去查询,如果缓存没有则从数据库中查询,并添加至缓存。(查)
    @Cacheable(value = "cacheName", key = "#id")
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m是只奶牛猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值