Redis常用数据的基础操作

Redis常用数据的基础操作

一、使用redis前提准备

1.导入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2.配置文件

spring:
  redis:
    host: ${sky.redis.host}//配置访问地址 本地 localhost
    port: ${sky.redis.port}//配置端口 默认 6379
    database: ${sky.redis.database}//配置连接的redis表 默认自动生成16张表,不设置默认第一张表。

3.创建配置类

/**
 * 配置类 获取redis对象 --> 获取对象后进行基本操作
 */
@Configuration
@Slf4j
public class RedisConfiguration {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
        log.info("开始创建redis模板对象....");
        RedisTemplate redisTemplate = new RedisTemplate();
        //设置redis的连接工厂对象
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置redis key value的序列化器  字符串类型
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}

Redis常用数据类型

redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:

字符串string
哈希hash
列表list
集合set
有序集合sorted set/zset

二、Redis常用数据类型的基础命令和对应java的实现操作

1.redis中字符串命令

SET key value 设置指定key的值
GET key 获取指定key的值
SETEX key seconds value 设置指定key的值,并将key的过期时间设为seconds秒
SETNX key value 只有在key不存在时设置key的值

java中对redis的字符串操作

//java中操作redis的字符串的代码
@Test
public void testString(){
    //获取操作对象
    ValueOperations valueOperations = redisTemplate.opsForValue();

    //set get
    valueOperations.set("姓名","吴通");
    String name = (String) valueOperations.get("姓名");
    System.out.println(name);

    //有效期变量
    valueOperations.set("code","1234",3, TimeUnit.MINUTES);
    //是否存在变量 没有创建,有则不创建。
    valueOperations.setIfAbsent("lock",1);
    valueOperations.setIfAbsent("lock",2);
}

2.redis中哈希命令

redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象,常用命令:
HSET key field value 将哈希表 key中的字段field 的值设为value
HGET key field 获取存储在哈希表中指定字段的值
HDEL keyfield 删除存储在哈希表中的指定字段
HKEYS key 获取哈希表中所有字段
HVALS key 获取哈希表中所有值

java中对redis的哈希操作

//java中操作redis的hash代码
@Test
public void testHash(){
    HashOperations hashOperations = redisTemplate.opsForHash();

    //设置值
    hashOperations.put("20","name","狗");
    hashOperations.put("20","age",17);

    //获取值
    String name = (String) hashOperations.get("20", "name");
    System.out.println(name);

    Set keys = hashOperations.keys("20");
    System.out.println(keys);

    List values = hashOperations.values("20");
    System.out.println(values);

    hashOperations.delete("20","name");

}

3.redis中列表命令

redis列表是简单的字符串列表,按照插入顺序排序,常用命令:
LPUSH key valuel [value2] 将一个或多个值插入到列表头部
LRANGE key start stop 获取列表指定范围内的元素
RPOP key 移除并获取列表最后一个元素
LLEN key 获取列表长度

java中对redis的列表操作

//java中操作redis中list类型的数据
@Test
public void testList(){
    //获取列表操作对象
    ListOperations listOperations = redisTemplate.opsForList();

    //对列表进行操作 左近右出
    //单个插入
    listOperations.leftPush("myList","ab");
    //多个插入
    listOperations.leftPushAll("myList","c","d","e");

    //输出集合数据
    List mylist = listOperations.range("myList", 0, -1);
    System.out.println(mylist);

    //右出数据 也就是删除插入的第一个数据
    listOperations.rightPop("myList");

    //列表数据个数
    Long myListSize = listOperations.size("myList");
    System.out.println(myListSize);
    
}

4.redis中集合命令

//java操作redis中set类型的数据
@Test
public void testSet(){
    SetOperations setOperations = redisTemplate.opsForSet();

    setOperations.add("set1","a","b","c","d");
    setOperations.add("set2","a","b","x","y");

    //包含的元素
    Set set1 = setOperations.members("set1");
    System.out.println(set1);

    //大小
    Long size = setOperations.size("set1");
    System.out.println(size);

    //交集
    Set intersect = setOperations.intersect("set1", "set2");
    System.out.println(intersect);

    //并集
    Set union = setOperations.union("set1", "set2");
    System.out.println(union);

    setOperations.remove("set1","a","b");
}

5.redis中有集合命令

/**
 * java中操作redis中sorted set集合类型的数据
 */
@Test
public void testSortedSet(){
    ZSetOperations zSetOperations = redisTemplate.opsForZSet();

    zSetOperations.add("zSet","a",13);
    zSetOperations.add("zSet","b",11);
    zSetOperations.add("zSet","c",15);

    //输出集合数据
    Set zSet = zSetOperations.range("zSet", 0, -1);
    System.out.println(zSet);

    //指定value加上  15 + 10 = 25
    zSetOperations.incrementScore("zSet","c",10);

    //删除 value a b
    zSetOperations.remove("zSet","a","b");
}

三、通用操作

/**
 * 通用命令操作
 */
@Test
public void testCommon(){
    //获取所有的key键
    Set keys = redisTemplate.keys("*");
    System.out.println(keys);

    //判断是否存在该键 有则true 无则false
    Boolean name = redisTemplate.hasKey("name");
    Boolean set1 = redisTemplate.hasKey("set1");

    //获取每个键的数据类型并输出
    for (Object key : keys){
        DataType type = redisTemplate.type(key);
        System.out.println(type.name());
    }

    //删除整个myList集合
    redisTemplate.delete("myList");
}

四、应用

当业务场景只需要一个字段属性的时候,直接在数据库创建一个单独的表来维护这个属性值不推荐。所以用到redis数据库,直接在controller中设置和获取业务逻辑需要的数据。–redis的数据完全是存储在内存中的

@RestController("adminShopController")
@RequestMapping("/admin/shop")
@Slf4j
public class ShopController {
    @Autowired
    RedisTemplate redisTemplate;

    //设置店铺状态
    @PutMapping("/{status}")
    public Result setStatus(@PathVariable Integer status){
        log.info("设置店铺的状态为:{}",status == 1 ? "营业中":"打烊中");
        //设置状态 用redis数据库  -- string类型数据存储
        redisTemplate.opsForValue().set(ShopConstant.KEY,status);
        return Result.success();
    }

    //获取店铺状态 并在前端页面显示接收的状态
    @GetMapping("/status")
    public Result<Integer> getStatus(){
        Integer status = (Integer) redisTemplate.opsForValue().get(ShopConstant.KEY);
        log.info("接收设置店铺的状态为:{}",status == 1 ? "营业":"打烊");
        return Result.success(status);
    }
}
  • 16
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值