命令说明zadd key score1 val1 score2 val2 score3 val3 ...有序集合添加带score值的元素zscore key val获取集合中某个值对应score值zrange key 0 -1 [withscores]zrange zset1 0 -1 ,结果为所有的值,不带分数;如:zrange zset1 0 -1 ,结果为所有的值,不带分数zrange zset1 0 -1 withscores结果为所有的值和分数zrangebyscore key 开始score 结束score获取score值在开始score-结束score之间的元素zrangebyscore zset1 10 40获取score值在10-40之间的元素,包含10和40zrangebyscore zset1 10 (40不包含40值;( 的含义是不包含zrangebyscore zset1 (10 (40不包含10,40值zrangebyscore zset1 10 50 limit 2 2limit 结果的起始下标 , 获取的个数;limit 含义是限制获取的条数,相当于mysql的分页;zrem key 某score下对应的value值删除元素zcard key获取key对应的值的个数;注意score 和 value是一个整体zcount key score区间获取分值区间内元素个数zrank key values值获得下标值zscore key 对应value值获得value对应分数zrevrank key value值逆序获得对应逆序的下标值zrevrange key 起始下标,结束下标将之前顺序进行倒序zrevrangebyscore key 结束score 开始score根据score值输出元素zincrby key 增加分值 value值给对应的值增加score值2、Redis整合2.1 spring-boot-starter-data-redis 依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>2.2 redis配置#端口号server: port: 8096# redis配置spring: redis: host: 127.0.0.1 #如果是redis远程服务器,此处redis服务器ip地址 port: 6379 #默认端口# database: 0 #指定redis数据库,默认是0# password: # 密码有就写,没有就省略2.3 SpringBoot框架自动配置的redisTemplate2.3.1 清空数据库//自动装配 SpringBoot框架自动配置的redisTemplate@Autowiredprivate RedisTemplate<Object,Object> redisTemplate;//基于SpringBoot框架自动配置的redisTemplate,操作redis缓存//获取连接RedisConnection connection = redisTemplate.getConnectionFactory().getConnection();//清空数据库中的所有数据log.info("清空数据库中的所有数据");connection.flushDb();2.3.2 添加数据//程序中,添加数据据到redislog.info("------ 基于SpringBoot框架自动配置的redisTemplate 添加数据 ------");redisTemplate.opsForValue().set("kh96_class_name","KGC_KH96");redisTemplate.opsForValue().set("student_num",19);2.3.3 获取数据//程序中 , 从redis获取数据log.info("------ 基于SpringBoot框架自动配置的redisTemplate 获取数据 ------");log.info("****** 根据 班级的key:{},获取班级名称:{} ******","kh96_class_name",redisTemplate.opsForValue().get("kh96_class_name"));log.info("****** 根据 班级的key:{},获取班级人数:{} ******","student_num",redisTemplate.opsForValue().get("student_num"));2.3.4 修改值 (出现错误)//程序中,基于SpringBoot框架自动配置的redisTemplate,操作redis缓存,存在问题//场景:对班级人数进行增减操作 , 比如将班级人数,增加10log.info("------ 基于SpringBoot框架自动配置的redisTemplate 操作数据 ------");redisTemplate.opsForValue().increment("student_num",10);//直接报错,会报500异常: redis.clients.jedis.exceptions.JedisDataException: ERR value is not an integer or out of range//原因,通过系统默认的 redisTemplate,存放key和value值时,会自动使用Object类的序列化和反序列化,导致redis中真实存放的数据不是原始值 , 而是序列化后的值数据结果:
文章插图
2.4 自定义redisTemplate2.4.1 fastjson 依赖<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.62</version></dependency>2.4.2 自定义redisTemplate 配置类//Redis自定义配置类,实现一个自定义序列化方式的 redisTemplate,提缓缓掉默认自动配置的 redisTemplate,实现String类型任意类型的value@Configurationpublic class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { // 自定义redisTemplate的模板对象 RedisTemplate<String, Object> template = new RedisTemplate<>(); // 设置连接工厂 template.setConnectionFactory(redisConnectionFactory); //由于要通过程序操作远程的redis数据库 , 必须支持序列化,才可以让程序中的数据,在网络中传输 //定义String类型的序列化方式 StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); // 定义fastjson序列化方式,可以序列化任何对象 FastJsonRedisSerializer<Object> fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class); // 需改为新的序列化方式 template.setKeySerializer(stringRedisSerializer); template.setValueSerializer(fastJsonRedisSerializer); template.setHashKeySerializer(stringRedisSerializer); template.setHashValueSerializer(fastJsonRedisSerializer); // 初始化为新的模板 template.afterPropertiesSet(); return template; }}
推荐阅读
- 五 SpringBoot - Java8 新特性
- 王者荣耀七周年庆时间是什么时候
- 四 SpringBoot - 整合Mybatis,逆向工程,JPA
- 六界召唤师七天十星燃灯攻略是什么
- 挽联大全通用版 七字挽联大全
- 一篇文章带你掌握主流办公框架——SpringBoot
- redis bitmap数据结构之java对等操作
- 我的世界怎么去末影城(我的世界七种传送门)
- 三 SpringBoot - Slf4j+logback 日志,异步请求,定时任务
- Springboot 之 Filter 实现超大响应 JSON 数据压缩