Redis的Java客户端
Jedis线程不安全,lettuce线程安全
Jedis
测试
引入依赖- <dependencies>
- <dependency>
- <groupId>redis.clients</groupId>
- <artifactId>jedis</artifactId>
- <version>3.7.0</version>
- </dependency>
- <dependency>
- <groupId>org.junit.jupiter</groupId>
- <artifactId>junit-jupiter</artifactId>
- <version>5.7.0</version>
- </dependency>
- </dependencies>
复制代码 Test.java- public class JedisTest {
- private Jedis jedis;
- @BeforeEach
- void setUp() {
- //1.建立连接
- jedis=new Jedis("192.168.164.128",6379);
- //2.设置密码
- jedis.auth("123456");
- //3.选择库
- jedis.select(0);
- }
- @Test
- void testString() {
- //存入
- String result=jedis.set("name","熊哥");
- System.out.println("result="+result);
- //获取
- String name=jedis.get("name");
- System.out.println("name="+name);
- //存入
- jedis.hset("user:1","name","Jack");
- jedis.hset("user:1","age","21");
- //获取
- Map<String, String> map = jedis.hgetAll("user:1");
- System.out.println(map);
- }
- @AfterEach
- void tearDown() {
- //关闭连接
- if(jedis!=null){
- jedis.close();
- }
- }
- }
复制代码 Jedis连接池
Jedis本身是线程不安全的,且频繁的创建和销毁连接有性能损耗,因此推荐使用Jedis连接池代替Jedis直接连接
JedisConnectionFactory.java- public class JedisConnectionFactory {
- //连接池对象
- private static final JedisPool jedisPool;
- //初始化
- static {
- //配置连接池
- JedisPoolConfig poolConfig = new JedisPoolConfig();
- poolConfig.setMaxTotal(8); //最大8个连接
- poolConfig.setMaxIdle(8); //最大空闲数量
- poolConfig.setMinIdle(0); //最小空闲数量
- poolConfig.setMaxWaitMillis(1000); //当池内没有返回对象时最大等待时间
- //创建连接池对象(JedisPoolConfig,ip,port,timeout,password)
- jedisPool=new JedisPool(poolConfig,"192.168.164.128",6379,1000,"123456");
- }
- public static Jedis getJedis(){
- return jedisPool.getResource();
- }
- }
复制代码 Test.java(改变建立连接的语句)- public class JedisTest {
- private Jedis jedis;
- @BeforeEach
- void setUp() {
- //1.建立连接
- // jedis=new Jedis("192.168.164.128",6379);
- jedis= JedisConnectionFactory.getJedis();
- //2.设置密码
- jedis.auth("123456");
- //3.选择库
- jedis.select(0);
- }
- @Test
- void testString() {
- //存入
- String result=jedis.set("name","熊哥");
- System.out.println("result="+result);
- //获取
- String name=jedis.get("name");
- System.out.println("name="+name);
- //存入
- jedis.hset("user:1","name","Jack");
- jedis.hset("user:1","age","21");
- //获取
- Map<String, String> map = jedis.hgetAll("user:1");
- System.out.println(map);
- }
- @AfterEach
- void tearDown() {
- //关闭连接
- if(jedis!=null){
- jedis.close();
- }
- }
- }
复制代码 SpringDataRedis
SpringDataRedis中提供RedisTemplate工具类,封装了各种对Redis的操作。springboot2.x以前默认支持Jedis,以后默认支持lettuce
依赖- <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>
复制代码 application.yaml- spring:
- redis:
- host: 192.168.164.128
- port: 6379
- password: 123456
- database: 0
- lettuce:
- pool:
- max-active: 8
- max-idle: 8
- min-idle: 0
- max-wait: 100ms
复制代码 Test.java- @SpringBootTest
- class RedisDemoApplicationTests {
- @Resource
- private RedisTemplate<String,Object> redisTemplate;
- @Test
- void contextLoads() {
- //写入一条String数据
- redisTemplate.opsForValue().set("name","王五");
- //获取
- Object name=redisTemplate.opsForValue().get("name");
- System.out.println(name);
- }
- }
复制代码 序列化以实现跨平台存储(在上面的基础上修改)
添加配置类RedisConfig.java- @Configuration
- public class RedisConfig {
- @Bean
- public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory connectionFactory){
- //创建RedisTemplate对象
- RedisTemplate<String, Object> template = new RedisTemplate<>();
- //设置连接工厂
- template.setConnectionFactory(connectionFactory);
- //创建JSON序列化工具
- GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
- //设置Key的序列化
- template.setKeySerializer(RedisSerializer.string());
- template.setHashKeySerializer(RedisSerializer.string());
- //设置Value的序列化
- template.setValueSerializer(jsonRedisSerializer);
- template.setHashValueSerializer(jsonRedisSerializer);
- //返回
- return template;
- }
- }
复制代码 Test.java中修改下面这行- private RedisTemplate<String,Object> redisTemplate;
复制代码若linux下还是显示乱码,在启动客户端时最后加上 --raw
StringRedisTemplate(上面的经典白学)
Spring默认提供了一个StringRedisTemplate类,它的key和value的序列化方式默认是String方式。省去了自定义RedisTemplate的过程
Test.java- @SpringBootTest
- public class RedisStringTest {
- @Autowired
- private StringRedisTemplate stringRedisTemplate;
- @Test
- void contextLoads() {
- //写入一条String数据
- stringRedisTemplate.opsForValue().set("name","王五");
- //获取
- Object name=stringRedisTemplate.opsForValue().get("name");
- System.out.println(name);
- }
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |