【Redis学习01】Redis基础操作

1. 什么是Redis

记得之前在springboot学习中讲解过redis安装以及springboot如何整合redis,感兴趣的小伙伴可以找到springboot专栏的相关blog进行学习。

在这里我们重新简要介绍一下redis

Redis是一款采用key-value数据存储格式的内存级NoSQL数据库,重点关注数据存储格式,是key-value格式,也就是键值对的存储形式。与MySQL数据库不同,MySQL数据库有表、有字段、有记录,Redis没有这些东西,就是一个名称对应一个值,并且数据以存储在内存中使用为主。什么叫以存储在内存中为主?其实Redis有它的数据持久化方案,分别是RDB和AOF,但是Redis自身并不是为了数据持久化而生的,主要是在内存中保存数据,加速数据访问的,所以说是一款内存级数据库

总结几点特性

  • 基于内存存储,读写性能高
  • 适合存储热点数据(热点商品,咨询,新闻)
  • 企业应用广泛

Redis使用场景

  • 缓存
  • 任务队列
  • 消息队列
  • 分布式锁

redis官网,官网上有教程,大家可以自行登录学习

http://redis.io

在这里插入图片描述

2. Redis数据类型

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

  • 字符串String
  • 哈希Hash
  • 列表List
  • 集合Set
  • 有序集合Sorted Set

在这里插入图片描述

3. Redis常用命令

对于redis常用命令,我将在控制台以及java中进行演示如何使用。

需要注意的是,在java中演示可以创建springboot项目,创建完项目需要导入Redis相对应的坐标。

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

同时,我们需要重写redis的一个序列化的配置类,记得将其声明为spring管理的配置类。

/**
 * Redis配置类
 */

@Configuration
public class RedisConfig extends CachingConfigurerSupport {

    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {

        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();

        //默认的Key序列化器为:JdkSerializationRedisSerializer
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());

        redisTemplate.setConnectionFactory(connectionFactory);

        return redisTemplate;
    }

}

3.1 字符串String操作命令

在这里插入图片描述
在这里插入图片描述

@SpringBootTest(classes = App.class)
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {

    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 操作String类型数据
     */
    @Test
    public void testString(){
        redisTemplate.opsForValue().set("city123","beijing");

        String value = (String) redisTemplate.opsForValue().get("city123");
        System.out.println(value);

        redisTemplate.opsForValue().set("key1","value1",10l, TimeUnit.SECONDS);

        Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city1234", "nanjing");
        System.out.println(aBoolean);
    	}
    }

在这里插入图片描述

3.2 哈希Hash操作命令

在这里插入图片描述

/**
     * 操作Hash类型数据
     */
    @Test
    public void testHash(){
        HashOperations hashOperations = redisTemplate.opsForHash();

        //存值
        hashOperations.put("002","name","xiaoming");
        hashOperations.put("002","age","20");
        hashOperations.put("002","address","bj");

        //取值
        String age = (String) hashOperations.get("002", "age");
        System.out.println(age);

        //获得hash结构中的所有字段
        Set keys = hashOperations.keys("002");
        for (Object key : keys) {
            System.out.println(key);
        }

        //获得hash结构中的所有值
        List values = hashOperations.values("002");
        for (Object value : values) {
            System.out.println(value);
        }
    }

在这里插入图片描述

3.3 列表List操作命令

在这里插入图片描述
在这里插入图片描述

    /**
     * 操作List类型的数据
     */
    @Test
    public void testList(){
		ListOperations listOperations = redisTemplate.opsForList();

        //存值
        listOperations.leftPush("012","aa");
        listOperations.leftPushAll("012","bb","cc","dd");

        //取值
        List list012 = listOperations.range("012", 0, 3);
        for (Object list : list012) {
            System.out.println("列表元素"+list);
        }

        //获得列表长度 llen
        Long size = listOperations.size("012");
        int len = size.intValue();
        for (int i = 0; i < len; i++) {
            //出队列
            String element = listOperations.rightPop("012").toString();
            System.out.println("列表元素"+element);
        }
    }

在这里插入图片描述

3.4 集合Set操作命令

特别注意,这个集合是无序的,接下去我们还会讲有序集合。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

		/**
     * 操作Set类型的数据
     */
    @Test
    public void testSet(){
		SetOperations setOperations = redisTemplate.opsForSet();
        
        //存值
        setOperations.add("013","aaa","bbb","ccc");

        //取值
        Set members = setOperations.members("013");
        for (Object member : members) {
            System.out.println(member);
        }
        System.out.println("======================");


        //删除集合元素
        setOperations.remove("013","aaa");

        //存值
        Set members1 = setOperations.members("013");
        for (Object mem : members1) {
            System.out.println(mem
            );
        }
    }

在这里插入图片描述

3.5 有序集合Sorted Set操作命令

在这里插入图片描述

在这里插入图片描述

	/**
     * 操作ZSet类型的数据
     */
    @Test
    public void testZset(){

        ZSetOperations zSetOperations = redisTemplate.opsForZSet();

        //存值
        zSetOperations.add("014","a",10);
        zSetOperations.add("014","b",15);
        zSetOperations.add("014","c",8);
        zSetOperations.add("014","d",13);

        //取值
        Set set = zSetOperations.range("014", 0, -1);
        for (Object s : set) {
            System.out.println(s);
        }
        System.out.println("======================");


        //修改分数
        zSetOperations.incrementScore("014","a",10);
        zSetOperations.incrementScore("014","b",10);

        //取值
        Set set1 = zSetOperations.range("014", 0, -1);
        for (Object s1 : set1) {
            System.out.println(s1);
        }

        System.out.println("======================");

        //删除元素
        zSetOperations.remove("014","a","b");
        Set set2 = zSetOperations.range("014", 0, -1);
        for (Object s2 : set2) {
            System.out.println(s2);
        }
    }


在这里插入图片描述

3.6 通用命令

在这里插入图片描述

在这里插入图片描述

    /**
     * 通用操作,针对不同的数据类型都可以操作
     */
    @Test
    public void testCommon(){
    
        //获取Redis中所有的key
        Set keys = redisTemplate.keys("*");
        for (Object key : keys) {
            System.out.println(key);
        }

        //判断某个key是否存在
        Boolean flag = redisTemplate.hasKey("011");
        System.out.println(flag);

        //删除指定key
        redisTemplate.delete("013");

        //获取指定key对应的value的数据类型
        DataType type = redisTemplate.type("014");
        System.out.println(type);
    }
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值