Spring Data Redis

文章目录

  • Redis各种Java客户端
  • Spring Data Redis
    • 使用方式
    • 操作字符串类型的数据
    • 操作哈希类型数据
    • 列表类型
    • 集合类型
    • 有序集合类型
    • 通用类型

Redis各种Java客户端

Java中如何操作redis,这里主讲IDEA中的框架Spring Data Redis来操作redis
Jedis是官方推出的,对应指令和操作redis相同
Spring Data Redis其实就是对Jedis和Lettuce进行一个高度封装,使用简单
Spring Data Redis_第1张图片

Spring Data Redis

使用方式

Spring Data Redis_第2张图片
Spring Data Redis_第3张图片
依赖我已经导入好了
设置一下配置文件
Spring Data Redis_第4张图片
写一下配置类
Spring Data Redis_第5张图片

@Configuration
@Slf4j
public class RedisConfiguration {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
        log.info("开始创建redis模板对象...");
        RedisTemplate redisTemplate = new RedisTemplate();
        //设置redis的连接工厂对象
        //redisConnectionFactory是redis-starter依赖帮我们创建放入IOC容器中,不用自己创建
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置redis key 序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());

        return  redisTemplate;
    }
}

然后我们就创一个测试类,测试对应bean是否创建成功(自己测)
学习一下如果使用该框架操作redis
Spring Data Redis_第6张图片
五种不同类型的对象,用来操作不同类型的key-value

		ValueOperations valueOperations = redisTemplate.opsForValue();
        HashOperations hashOperations = redisTemplate.opsForHash();
        ListOperations listOperations = redisTemplate.opsForList();
        SetOperations setOperations = redisTemplate.opsForSet();
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();

操作字符串类型的数据

注意:redis和java中的字符串是不一样的,其实我们传什么对象,都会被序列化器序列化字符串存储到redis中
redisTemplate增添序列化器是为了防止乱码,如果不添加会有默认的序列化器,那个就因为序列化器不同,它显出来也不同,也不是说是乱码,底层算法不一样而已

    /**
     * 操作字符串类型的数据
     */
    @Test
    public void testString(){
        //set  get setex stenx
        ValueOperations valueOperations = redisTemplate.opsForValue();
        //set(key,value) 正常设置
        valueOperations.set("111","000");
        //get 获得对应可以的value
        Object o = valueOperations.get("111");
        System.out.println(o);
        //setex seconds 限时键值对
        valueOperations.set("110","001",101, TimeUnit.SECONDS);
        //setnx 只有不存在才可以设置
        valueOperations.setIfAbsent("lock","1");
    }
}

setex对应的方法
timeout代表对应时间数值,unit代表时间单位,分/秒等等
Spring Data Redis_第7张图片

测试一下
控制台是正常的
Spring Data Redis_第8张图片
value不是我们的000
因为redis对java来源的数据进行序列化就变成对应的样子了
为什么key不是乱码?
因为我们之前设置了key的序列化器

别问为什么没有110的key,因为我只设置了10s没截到

//设置redis key 序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());

Spring Data Redis_第9张图片
setex显示
Spring Data Redis_第10张图片

操作哈希类型数据

hset 对应put
hget对应get
hdel对应delete
hkeys对应keys
hvals对应values

Spring Data Redis_第11张图片

列表类型

lpush多个插入对应leftPushAll,单个插入对应leftPush
lrange对应range(返回对应索引的值所形成的集合)
rpop对应rightPop 弹出最低的并返回
llen对应size 就长度

Spring Data Redis_第12张图片

集合类型

add对应sadd 添加值
smembers对应members 获取对应key下的集合value
size 获取长度
intersect 获取集合交集
union 获取集合并集
remove 删除集合中的元素

Spring Data Redis_第13张图片

有序集合类型

add对应zadd 指定分数和value
range对应zrange 查询对应索引0-1代表所有元素
incrementScore 对应 zincrby 给对应key的value加指定点的分
remove对应 zrem 删除集合中的元素

Spring Data Redis_第14张图片

通用类型

通用命令就是直接操作redisTemplate
keys对应keys(pattern) *代表全部
exists对应hasKey(key)
type对应type(key)
del对应delete(key)

Spring Data Redis_第15张图片

你可能感兴趣的:(Redis,spring,redis,java)