Redis学习

1.redis简介

redis是一个基于内存的key-kalue结构的数据库(mysql是数据文件存在磁盘上的,通过二维表存储数据)

  • 一个key-value就是一条数据
  • 读写性能更高
  • 适合存储热点数据(热点商品、资讯、新闻 短时间内大量访问的数据)
  • 企业应用广泛

中文官网:https://www.redis.net.cn/ 

1.2redis下载

redis属于绿色软件,可以直接解压后使用

2.redis中的数据类型

2.1五种最常用的数据类型

2.2数据类型的特点 

3.redis中的常用命令

1.字符串操作命令

 2.哈希操作命令

3.列表操作命令

 4.集合操作命令

5.有序集合操作命令 6.通用命令7.在java中操作Redis

第一种Jedis比较贴近与redis

lettuce性能比较优秀

sdr封装了

7.1如何使用Spring Data Redis

3.如何在Java中使用redis

3.1引入依赖

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

3.2填写信息

在yml文件中填写相关信息

注意:一定在Spring之下!!!

spring:
  profiles:
    active: dev
  main:
    allow-circular-references: true
  datasource:
    druid:
      driver-class-name: ${sky.datasource.driver-class-name}
      url: jdbc:mysql://${sky.datasource.host}:${sky.datasource.port}/${sky.datasource.database}?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
      username: ${sky.datasource.username}
      password: ${sky.datasource.password}
  redis:
    host: {$localhost}
    port: {$port}
    password: {$password}
    database: {$database}

3.3创建redis配置类

这个类主要提供一个redis登陆的功能,通过IOC中的一个redis实体来使用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的序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //设置redis Value的序列化器
//        redisTemplate.setValueSerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}

3.4调用函数

这里将test注解注释掉避免每次运行都要运行test

//@SpringBootTest
public class SpringDataRedisTest {

    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 测试IOC容中是否有对象
     */
    @Test
    public void restRedisTemplate(){
        System.out.println(redisTemplate);
        ValueOperations valueOperations = redisTemplate.opsForValue();
        HashOperations hashOperations = redisTemplate.opsForHash();
        ListOperations listOperations = redisTemplate.opsForList();
        SetOperations setOperations = redisTemplate.opsForSet();
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
    }

    /**
     * 测试String类型命令
     */
    @Test
    public void testString(){
        // set get setex setnx
        //添加key-value
        redisTemplate.opsForValue().set("city","beijng");
        String city = (String)redisTemplate.opsForValue().get("city");
        System.out.println(city);
        //设置过期时常
        redisTemplate.opsForValue().set("code","1234",10, TimeUnit.SECONDS );
        //如果不存在才添加
        redisTemplate.opsForValue().setIfAbsent("lock","1" );
        redisTemplate.opsForValue().setIfAbsent("lock","2" );
    }

    /**
     * 测试Hash类型数据
     */
    @Test
    public void testHash(){
        //hset hget hdel hkeys hvals
        //hset插入hash表中的数据
        HashOperations hashOperations = redisTemplate.opsForHash();
        hashOperations.put("300","name","tom");
        hashOperations.put("300","age","20");

        //get
        String name = (String)hashOperations.get("300", "name");

        //获取集合所有的keys
        Set keys = hashOperations.keys("300");
        System.out.println(keys);

        //获取所有的values
        List values = hashOperations.values("300");
        System.out.println(values);

        //hdel删除字段
        hashOperations.delete("100", "name");


    }

    /**
     * 测试列表类型数据
     */
    @Test
    public void testList(){
        //lpush lrange rpop llen
        ListOperations listOperations = redisTemplate.opsForList();

        //lpush
        listOperations.leftPushAll("mylist3","a","b","c");
        listOperations.leftPush("mylist3","d");

        List mylist3=listOperations.range("mylist3",0,-1);
        System.out.println("第一次插入后:"+mylist3);

        String pop =(String) listOperations.rightPop("mylist3");
        System.out.println("被弹出的元素是:"+pop);
        mylist3=listOperations.range("mylist3",0,-1);
        System.out.println("第一次弹出后:"+mylist3);

        Long size = listOperations.size("mylist3");
        System.out.println(size);

    }

    /**
     * 测试集合类型的数据
     */
    @Test
    public void testSet(){
        SetOperations setOperations = redisTemplate.opsForSet();

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

        Set set1 = setOperations.members("set1");
        System.out.println("set1:"+set1);

        Long set1Size = setOperations.size("set1");
        System.out.println("set1:"+set1Size);

        Set intersect = setOperations.intersect("key1", "key2");
        System.out.println("intersect:"+intersect);

        Set union = setOperations.union("key1", "key2");
        System.out.println("union:"+union);

        setOperations.remove("set1", "f");
        Set set1_remove = setOperations.members("set1");
        System.out.println("set1_remove:"+set1_remove);

    }

    /**
     * 测试有序集合数据
     */
    @Test
    public void testZset(){
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();

        zSetOperations.add("zset1","a",10);
        zSetOperations.add("zset1","b",12);
        zSetOperations.add("zset1","c",9);

        Set zset1=zSetOperations.range("zset1",0,-1);
        System.out.println("zset"+zset1);

        zSetOperations.incrementScore("zset1","c",10);

        zSetOperations.remove("zset","a","b");

    }

    /**
     * 测试通用命令
     */
    @Test
    public void testNomal(){
        Set keys = redisTemplate.keys("*");
        System.out.println("keys="+keys);

        boolean name= redisTemplate.hasKey("name");
        System.out.println("name="+name);
        Boolean set1 = redisTemplate.hasKey("set1");

        for(Object key : keys){
            DataType dataType= redisTemplate.type(key);
            System.out.println(dataType);
        }

        redisTemplate.delete("mylist");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值