1、reids 基础
SortedSet类型
特性
1.可排序
2.元素不重复性
3.查询速度快
与普通的集合类型相比,SortedSet 主要有以下两个特点:
- 有序性:根据分数对元素进行排序,便于范围查找等操作。
- 不重复性:即使添加了相同的元素,也只会保留一个。
SortedSet 提供了许多常用的操作方法,包括添加元素、删除元素、查找元素、范围查找(支持按分数范围、按排名范围)等。具体的方法和使用方式可以参考 Redis 文档或教程。
在实际应用中,SortedSet 可以用于排行榜、计数器、带权重的任务队列等场景。以排行榜为例,可以将玩家与对应的分数作为 SortedSet 的元素,进行插入、删除、更新操作,同时可以方便地进行排名查找、前几名的统计等操作。
redis的java客服端
jedis: 以Redis命令作为方法名称,学习成本低,简单实用。但是Jedis实例是线程不安全的,多线程环境下需要基于连接池来使用
lettuce:Lettuce是基于Netty实现的,支持同步、异步和响应式编程方式,并且是线程安全的。支持Redis的哨兵模式、集群模式和管道模式。
redisson:Redisson是一个基于Redis实现的分布式、可伸缩的Java数据结构集合。包含了诸如Map.Queue. Lock.Semaphore. AtomicLong等强大功能
java-redis-client
vertx-redis-client
jedis
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>5.0.0-alpha2</version>
</dependency>
jedis连接池
Jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,因此使用Jedis连接池代替Jedis
SpringDateRedis
Spring Redis的优点:
简化的 API:Spring Data Redis提供了简单易用的API,使得与Redis进行交互变得更加方便和高效。
集成Spring生态系统:Spring Data Redis与其他Spring生态系统无缝集成,如Spring Boot、Spring MVC等,可以方便地与其他组件和框架进行协作开发。
缓存支持:Spring Data Redis提供了缓存注解,可以方便地将方法结果缓存到Redis中,提高系统性能和响应速度。
声明式事务管理:Spring Data Redis支持声明式事务管理,可以通过注解的方式来管理Redis操作的事务,保证数据的一致性和隔离性。
多种序列化支持:Spring Data Redis支持多种数据序列化方式,如JSON、XML、Protobuf等,使得存储和读取数据更加灵活可扩展。
强大的功能支持:Spring Data Redis提供了丰富的功能支持,如分布式锁、发布订阅、Lua脚本执行等,可以满足复杂应用场景下的需求。
主要缺点:
性能考虑:虽然Redis本身是一个高性能的内存数据库,但使用Spring Data Redis进行数据访问时,需要考虑性能问题,避免不必要的网络开销和序列化开销。

<!-- redis 依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 连接池依赖-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
yml中的配置
spring:
#redis的所有配置方式
redis:
host: localhost
port: 6379
# password: 123456 # 如果有密码,请填写密码
timeout: 2000ms
lettuce:
pool:
max-active: 8 #最大连接
max-idle: 8 #最大空闲连接
min-idle: 0 #最小空闲连接
max-wait: -1ms #连接等待时间
RedisTemplate的两种序列化实践方案
方案一:
1.自定义RedisTemplate
2.修改RedisTemplate的序列化器为GenericJackson2JsonRedisSerializer
方案二:
1.使用StringRedisTemplate
2.写入Redis时,手动把对象序列化为JSON
读取Redis时,手动把读取到的JSON反序列化为对象
RedisTemplate的序列化方式

config
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
// 创建Template对象
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
// 设置连接工厂
redisTemplate.setConnectionFactory(redisConnectionFactory);
//设置序列化工具
GenericJackson2JsonRedisSerializer jsonRedisSerializer =
new GenericJackson2JsonRedisSerializer();
// key和 hashKey采用 string序列化
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setHashKeySerializer(RedisSerializer.string());
// value和 hashValue采用 JSON序列化
redisTemplate.setValueSerializer(jsonRedisSerializer);
redisTemplate.setHashValueSerializer(jsonRedisSerializer);
return redisTemplate;
}
}
测试代码:
@Autowired
RedisTemplate<String,Object> redisTemplate;
@Test
void BookTypeName(){
List<BookTypeNameEntity> list = bookTypeNameService.list();
BookTypeNameEntity bookTypeNameEntity = list.get(0);
System.out.println(bookTypeNameEntity);
redisTemplate.opsForValue().set("bookType1",bookTypeNameEntity);
Object name = redisTemplate.opsForValue().get("bookType1");
System.out.println(name);
}
StringRedisTemplate的序列化方式
@Autowired
StringRedisTemplate stringRedisTemplate; private static final ObjectMapper mapper = new ObjectMapper(); @Test
void StringBookTypeName() throws JsonProcessingException {
List<BookTypeNameEntity> list = bookTypeNameService.list();
//获取对象
BookTypeNameEntity bookTypeNameEntity = list.get(0);
System.out.println(bookTypeNameEntity);
//手动序列化
String s = mapper.writeValueAsString(bookTypeNameEntity);
// 写入数据
stringRedisTemplate.opsForValue().set("bookType3", s);
String name = stringRedisTemplate.opsForValue().get("bookType3");
// 手动反序列化
BookTypeNameEntity book = mapper.readValue(name,BookTypeNameEntity.class);
System.out.println(name);
}
Hash 的 StringRedisTemplate 方式
@Test
void toHashBookTypeName() {
stringRedisTemplate.opsForHash() .put( "user:400", "name","虎哥");
stringRedisTemplate.opsForHash().put( "user:400", "age" , "121") ;
Map<Object, Object> entries = stringRedisTemplate.opsForHash().entries( "user:400");
System.out.println("entries-----------"+entries);
}
1、reids 基础的更多相关文章
- 二、Reids基础命令--字符串
11.一个字符串类型的KEY同意存储的数据的最大容量是 512MB 12.INCR 使key加1,key不存在时默认是0 . 返回递增后的值. 127.0.0.1:6379> incr num ...
- Redis基础知识之—— 缓存应用场景
转载原文:http://www.cnblogs.com/jinshengzhi/articles/5225718.html 一.MySql+Memcached架构的问题 Memcached采用客户端- ...
- 在centos6.5中安装reids
一.简介 Redis是一个key-value存储系统,是一个内存数据库,Redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作 ...
- reids配置参数详解
转自:http://www.jb51.net/article/60627.htm reids配置参数详解 #daemonize no 默认情况下, redis 不是在后台运行的,如果需要在后台运行, ...
- Java使用reids,以及redis与shiro集成
什么是redis:redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(so ...
- Redis基础知识点面试手册
Redis基础知识点面试手册 基础 概述 数据类型 STRING LIST SET HASH ZSET(SORTEDSET) 数据结构 字典 跳跃表 使用场景 会话缓存 缓存 计数器 查找表 消息队列 ...
- D11——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D11 20180908内容纲要: 1.RabbitMQ消息队列 (1)RabbitMQ安装 (2)Rabbits示例 模式一:fanout 模式二:direct ...
- Redis学习基础三
回顾: 上一基础上浅尝了redis的存储数据类型,这一节将分别介绍数据类型的基础使用 一.启动本地Redis服务 1.打开cmd 窗口 使用 cd 命令切换至redis 安装根目录 运行: redis ...
- Redis学习基础一
今天开始系统的学习redis基础知识,以往只是看redis的手册,貌似总是记不住.这次尝试手记笔记,使得印象更加深刻,从零开始学习.看是很慢,其实很快哟. 一.什么是Redis 至于什么是redis, ...
- Python菜鸟之路:Python基础-操作缓存memcache、redis
一.搭建memcached和redis 略,自己去百度吧 二.操作Mmecached 1. 安装API python -m pip install python-memcached 2. 启动memc ...
随机推荐
- MySQL误删恢复方法1
MySQL不同于oracle,没有闪回查询这类概念,但网上流传几个闪回的开源工具如 binglog2sql.MyFlash,可以使用binglog日志进行误操作数据的恢复. 笔者以前测试过 bingl ...
- Bug是如何产生的?
前言 知乎上有一个提问:Bug是如何产生的? ↓↓↓ 今天,我们就这个话题,一起来做个讨论. 个人觉得程序员与BUG的关系,就像空气中的细菌与人的关系一样. 我们不能完全杜绝与它接触,唯一能做的,就是 ...
- ELK-日志收集-Kibana WEB安全认证
1.ELK收集MYSQL日志实战: 日志收集存放目录位置: /usr/local/logstash/config/etc/ 1)日志采集-存入redis缓存数据库:mysql-redis.conf ...
- 立方骑士(lgP7354)
来水篇题解((( 图炸了,去洛谷博客看吧. 注:在本篇题解中, \(K\) 表示国王, \(N\) 表示骑士,不同颜色的 \(X\) 表示该位置国王可以达到,且被与之相同颜色的骑士封锁.方法不唯一,图 ...
- Boruvka 算法
Boruvka算法解决某些问题超级好用. 这些问题形如,给你n个点,每个点有点权,任意两个点之间有边权,边权为两个点权用过某种计算方式得出. 求最小生成树. 通常用 \(O(log n)\) 的时间可 ...
- L3-011 直捣黄龙
#include<bits/stdc++.h> using namespace std; using pii = pair<int, int>; const int N = 3 ...
- 2021 ICPC济南 J Determinant
题意就是给定一个矩阵,然后给出他的行列式的绝对值,这个值是精确的,然后让我们判断行列式的正负. 思路来源:一个Acmer 首先做这个题要明白一个性质才可以做,一个数和它的相反数对一个奇数的取模一定不同 ...
- 大白话说Python+Flask入门(三)
写在前面 今天状态很不好,我发现学这部分知识的时候,会出现溜号或者注意力无法集中的情况. 我能想到的是,大概率是这部分知识,应该是超出了我现在的水平了,也就是说我存在知识断层了,整体感觉真的是一知半解 ...
- 普冉PY32系列(十二) 基于PY32F002A的6+1通道遥控小车III - 驱动篇
目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 普冉PY32系列(三) P ...
- 【Javaweb】Servlet五 | HTTP协议【详解】
什么是HTTP协议 什么是协议? 协议是指双方或多方相互约定好,大家都需要遵守的规则,叫协议. 所谓HTTP协议,就是指,客户端和服务器之间通信时,发送的数据,需要遵守的规则,叫做HTTP协议. HT ...