目 录CONTENT

文章目录

Java操作redis

在水一方
2022-01-10 / 0 评论 / 0 点赞 / 1,036 阅读 / 3,050 字 / 正在检测是否收录...

实际Java项目中如何操作中是如何操作jedis的,这里做一个简单的梳理

先要在Linux上安装好redis具体可参考之前写的文章:
https://www.jiangxinyu1688.com/archives/linux%E5%AE%89%E8%A3%85redis

通过Jedis来操作

引入jedis的jar包、


	<dependency>
		<groupId>redis.clients</groupId>
		<artifactId>jedis</artifactId>
		<version>2.9.0</version>
	</dependency>


image.png

这里先创建有个字符串

set name zhangsan
提示:set key value [expiration EX seconds|PX milliseconds] [NX|XX]

测试代码


  public class JedisTest {
    private Jedis jedis;

    @Before
    public void before(){
        // 构建Jedis对象
        this.jedis =new Jedis("XX.XX.X.X",6379); // 域名+端口

    }
    @Test
    public void jedisTes(){

     Jedis jedis =new Jedis("XXX.XXX.XXX.XXX",6379);
        // 选择0号数据库,如果不写,默认就是0号
        jedis.select(0);
        jedis.set("age", "25");
        String val = jedis.get("name");
        Set<String> keys =  jedis.keys("*");  // 获取所有的key
        keys.stream().forEach(i-> System.out.println(i));
        Boolean boo = jedis.exists("name");
        System.out.println(boo);

    }
    
    @After
    public void close(){
        //释放资源
        jedis.close();
    }
}

junit的坐标


	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.12</version>
		<scope>test</scope>
	</dependency>


执行测试报以下错误:

image.png

处理方法;开启远程连接,在redis.conf文件中注释掉标记的这个位置
image.png

修改好之后重新运行报以下错误

DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface

解决办法:将redis.conf中的保护模式改为no
image.png

修改之后启动通过配置文件的方式启动
image.png

重新启动redis server之后连接成功

接下来熟悉相关的api就可以对redis中的数据进行操作

springboot整合redis

Spring Boot提供的数据访问框架Spring Data Redis基于Jedis?
Springboot data中Redis提供了 RedisTemplate和StringRedisTemplate来操作redis,不同之处在于操作的数据类型不同

加入reddis依赖

<!-- 引入 redis 依赖 -->	
<dependency>		 
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

# REDIS (RedisProperties)
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=localhost
# Redis服务器连接端⼝
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最⼤连接数(使⽤负值表示没有限制)
spring.redis.pool.max-active=8
# 连接池最⼤阻塞等待时间(使⽤负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最⼤空闲连接
spring.redis.pool.max-idle=8
# 连接池中的最⼩空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=0

测试类

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class SpringBootRedis {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @Test
    public void test() throws Exception {
// 保存字符串
        stringRedisTemplate.opsForValue().set("aaa", "111");
        Assert.assertEquals("111", stringRedisTemplate.opsForValue().get("aaa"));
    }

}

执行的时候报错提示:

image.png

解决方案:

去掉spring.redis.timeout=0 这个选项再连接就是正常的

扩展

Redis和Memcache的对比

相同点

  • 两个都是分布式内存数据库

不同点

  • redis采用的是单线程,memcache用的是多线程
  • redis支持数据落地(可以保存到磁盘),两种故障恢复模式,RDB和AOF,而Memcache只保存在内存中,一旦出现宕机内存中的数据就全部丢失了
  • redis支持丰富的数据类型,如String/list/set/hash/zset,而Memchae只支持String
  • redis支持String到512m/hash2^32 而Memcache只支持到10m

基本redis命令

创建:set key value [expiration EX seconds|PX milliseconds] [NX|XX]
查看所有的key:keys *
跟据key的名称获取值:get key(这里写key的名称)
根据key的名称删除key: del key(这里写key的名称)

Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象
image.png

0

评论区