Redis入门

Redis入门

什么是redis

redis是基于内存的数据结构存储系统,是一种非关系型、高性能键值对数据库。

redis的应用场景

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

redis的数据结构

redis一共有五种数据结构

①String

SET key value:设置key和value
GET key value:获取key和value
SETNX key seconds value:设置key的过期时间
SETNX key value:value的值为第一次设置key的value值

②Hash

HSET key filed value:在key中的filed字段设置value
HGET key filed:获取key中filed字段的value值
HDEL key filed:删除key中filed字段的value值
HKEYS key:获取hash表中的所有字段
HVALS key:获取hash表中的所有值
HGETALL key:获取hash表中所有指定key的字段和值

③List

LPUSH key value1:将一个或多个值插入列表的头部
LRANGE key start stop:获取列表指定范围内的元素
RPOP key:移除列表最后一个元素并返回
LLEN key:获取列表长度
BRPOP key timeout:移除最后一个元素并返回,如果列表没有元素则会堵塞列表一直等待或者是弹出元素

④Set

无序、唯一
SADD key num1 :向集合中添加元素
SMEMBERS:返回集合中的所有元素
SCARD key:获取集合中的元素
SINTER key1 key2:返回集合的交集
SUNION key1 key2:返回集合中的并集
SDIFF key1 key2:返回集合中的差集
SREM key num1 num2:移除集合中的元素

⑤sorted set

有序,根据double打分来排序
ZADD key score1 num1 :向集合中添加元素
ZRANGE key start stop:返回区间内的元素
ZINCRBY key increment num:在指定元素上加分
ZREM:删除一个或多个元素

通用命令

KEYS pattern:查找索引符合给定pattern 的key
EXISTS key:检查给定key是否存在
TYPE key:返回key 的类型
TTL key:返回剩下存活时间
DEL key:删除key

Spring Data Redis

①导入依赖
在这里插入图片描述
②配置yml
在这里插入图片描述
③注入序列化器
代码中存入的key与redis中的key不一致,需要配置RedisConfig将存入的key与redis中的key保持一致

@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;
    }

操作String类型数据

//String类型
@Test
public void  testString(){
    //存值
    redisTemplate.opsForValue().set("city","beijing");
    //取值
    String city = (String) redisTemplate.opsForValue().get("city");
    System.out.println(city);
    //设置时间
    redisTemplate.opsForValue().set("key1","value1",101, TimeUnit.SECONDS);
    //存值,如果值存在则不进行任何操作 setex
    Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city", "beijing");
    System.out.println(aBoolean);
}

操作hash类型数据

//操作hash类型
@Test
public  void testHash(){
    //存值
    HashOperations hashOperations = redisTemplate.opsForHash();
    hashOperations.put("001","name","xiaoming");
    hashOperations.put("001","age","15");
    hashOperations.put("001","address","beijing");


    //取值(获取hash结构中的所有字段)
    Set keys = hashOperations.keys("001");
    for (Object key : keys) {
        System.out.println(key);
    }
    //取值(获取hash结构中所有值)
    List values = hashOperations.values("001");
    k
    for (Object value : values) {
        System.out.println(value);
    }
}

操作List类型数据

//操作List类型
@Test
public void testList() {
    ListOperations listOperations = redisTemplate.opsForList();
    //存值(根据插入顺序进行排序)
    listOperations.leftPush("myList","a");
    listOperations.leftPushAll("myList","b","c");
    List<String> mylist = listOperations.range("myList", 0, -1);
    for (String value : mylist) {
        System.out.println(value);
    }
    //获取长度
    Long size = listOperations.size("myList");
    int listSize = size.intValue();
    //出队列
    for (int i = 0; i < listSize; i++) {
        String element = (String) listOperations.rightPop("myList");
        System.out.println(element);
    }
}

操作set类型数据

//操作set类型的数据
@Test
public void testSet(){
    SetOperations setOperations = redisTemplate.opsForSet();
    //存值
    setOperations.add("mySet","a","b","c");
    //取值
    Set mySet = setOperations.members("mySet");
    for (Object o : mySet) {
        System.out.println(o);
    }
    //删除
    setOperations.remove("mySet","a","b");
}

操作ZSet类型数据

//有序集合类型数据
public  void ZSet(){
    ZSetOperations zSetOperations = redisTemplate.opsForZSet();
    //存值
    zSetOperations.add("myZSet","a",10.0);
    zSetOperations.add("myZSet","b",11.0);
    zSetOperations.add("myZSet","c",12.0);
    //取值
    Set<String> myZSet = zSetOperations.range("myZSet", 0, -1);
    for (String s : myZSet) {
        System.out.println(s);
    }
    //修改分数
    zSetOperations.incrementScore("mySet","b",13.0);

    //取值
    myZSet = zSetOperations.range("myZSet",0,-1);
    for (String s : myZSet) {
        System.out.println(s);
    }
    //删除
    zSetOperations.remove("myZSet","a","b");

    //取值
    myZSet = zSetOperations.range("myZSet",0,-1);
    for (String s : myZSet) {
        System.out.println(s);
    }
}

通用操作不用数据类型

//操作不同的数据类型
@Test
public void testCommon(){
    Set<String> keys = redisTemplate.keys("*");
    for (String key : keys) {
        System.out.println(key);
    }
    //判断某个key是否存在
    Boolean key1 = redisTemplate.hasKey("key1");
    System.out.println(key1);

    //删除指定的key
    redisTemplate.delete("myZSet");
    //获取指定key对应的value数据类型
    DataType dataType = redisTemplate.type("mySet");
    System.out.println(dataType.name());
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值