Redis数据库

在前面我们学习了MySQL数据库,它是一种传统的关系型数据库,我们可以使用MySQL来更好地管理和组织我们的数据,虽然在小型Web应用下,只需要一个MySQL+Mybatis自带的缓存系统就可以胜任大部分的数据存储工作。但是MySQL的缺点也很明显,它的数据始终是存储在硬盘上的,对于我们的用户信息这种不需要经常发生修改的内容,使用MySQL存储确实可以,但是如果是快速更新或是频繁使用的数据,比如微博热搜、双十一秒杀,这些数据不仅要求服务器需要提供更高的响应速度,而且还需要面对短时间内上百万甚至上千万次访问,而MySQL的磁盘IO读写性能完全不能满足上面的需求,能够满足上述需求的只有内存,因为速度远高于磁盘IO。

因此,我们需要寻找一种更好的解决方案,来存储上述这类特殊数据,弥补MySQL的不足,以应对大数据时代的重重考验。

NoSQL全称是Not Only SQL(不仅仅是SQL)它是一种非关系型数据库

  1. No guarantee of ACID properties: NoSQL databases often prioritize scalability and performance over strict ACID (Atomicity, Consistency, Isolation, Durability) guarantees. They may sacrifice some of these properties to achieve higher scalability and availability.

  2. Non-compliance with SQL standards: NoSQL databases do not adhere to the SQL standard. Instead, they provide their own query languages or APIs for data manipulation and retrieval. These languages may vary across different NoSQL databases.

  3. Elimination of relational data associations: NoSQL databases do not rely on fixed table schemas and structured relationships between tables. They typically use flexible data models, such as key-value pairs, documents, graphs, or column families, to store and retrieve data. This flexibility allows for dynamic and schema-less data storage, enabling easier scalability and handling of unstructured and semi-structured data.

下载非官方的redis数据库安装后运行:

基本操作

在我们之前使用MySQL时,我们需要先在数据库中创建一张表,并定义好表的每个字段内容,最后再通过insert语句向表中添加数据,而Redis并不具有MySQL那样的严格的表结构,Redis是一个键值数据库,因此,可以像Map一样的操作方式,通过键值对向Redis数据库中添加数据(操作起来类似于向一个HashMap中存放数据)

在Redis下,数据库是由一个整数索引标识,而不是由一个数据库名称。 默认情况下,我们连接Redis数据库之后,会使用0号数据库,我们可以通过Redis配置文件中的参数来修改数据库总数,默认为16个。

我们可以通过select语句进行切换:

select 序号;

数据操作

我们来看看,如何向Redis数据库中添加数据:

```Plain Text set -- 一次性多个 mset [ ]…

![image.png](https://flowus.cn/preview/316de7c7-26ab-41ab-9e97-1c0db6bfeb86)

所有存入的数据默认会以**字符串**的形式保存,键值具有一定的命名规范,以方便我们可以快速定位我们的数据属于哪一个部分,比如用户的数据:

Java -- 使用冒号来进行板块分割,比如下面表示用户XXX的信息中的name属性,值为lbw set user:info:用户ID:name lbw

![image.png](https://flowus.cn/preview/c2bae873-d865-40ec-bbd0-11fa4208f609)

我们可以通过键值获取存入的值:

![image.png](https://flowus.cn/preview/88f67452-1944-46e9-aecc-86c83e5dca43)

它还支持数据的过期时间设定:

Plain Text set EX 秒 set PX 毫秒

![image.png](https://flowus.cn/preview/06965990-84a5-49d3-8bb0-c088cc5b0f8c)

当数据到达指定时间时,会被自动删除。我们也可以单独为其他的键值对设置过期时间:

![image.png](https://flowus.cn/preview/2e4230c6-682e-4072-89db-926cb91b34ab)

![image.png](https://flowus.cn/preview/1ff27734-2b53-4557-b6d7-404ec60e7c4b)

通过下面的命令来查询某个键值对的过期时间还剩多少:

Plain Text ttl -- 毫秒显示 pttl -- 转换为永久 persist

![image.png](https://flowus.cn/preview/2cf74240-8624-4394-b0ca-c057c353ccbc)

那么当我们想直接删除这个数据时呢?直接使用:

Java del

删除命令可以同时拼接多个键值一起删除

当我们想要查看数据库中所有的键值时:

Plain Text keys *

查询某个键是否存在:

Plain Text exists …

随机拿一个键:

Plain Text randomkey

将一个数据库中的内容移动到另一个数据库中:

Java move 数据库序号

修改一个键为另一个键:

Plain Text rename -- 下面这个会检查新的名称是否已经存在 renamex

如果存放的数据是一个数字,我们还可以对其进行自增自减操作:

Plain Text -- 等价于a = a + 1 incr -- 等价于a = a + b incrby b -- 等价于a = a - 1 decr

查看值的数据类型:

Java type ```

导入依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

starter提供的默认配置会去连接本地的Redis服务器,并使用0号数据库,当然你也可以手动进行修改:

```Plain Text spring: redis: #Redis服务器地址 host: 192.168.10.3 #端口 port: 6379 #使用几号数据库 database: 0

starter已经给我们提供了两个默认的模板类:

Plain Text @Configuration( proxyBeanMethods = false ) @ConditionalOnClass({RedisOperations.class}) @EnableConfigurationProperties({RedisProperties.class}) @Import({LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class}) public class RedisAutoConfiguration { public RedisAutoConfiguration() { }

@Bean
@ConditionalOnMissingBean(
    name = {"redisTemplate"}
)
@ConditionalOnSingleCandidate(RedisConnectionFactory.class)
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
    RedisTemplate<Object, Object> template = new RedisTemplate();
    template.setConnectionFactory(redisConnectionFactory);
    return template;
}

@Bean
@ConditionalOnMissingBean
@ConditionalOnSingleCandidate(RedisConnectionFactory.class)
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
    return new StringRedisTemplate(redisConnectionFactory);
}

}

可以直接注入`StringRedisTemplate`来使用模板:

Plain Text @SpringBootTest class SpringBootTestApplicationTests {

@Autowired
StringRedisTemplate template;

@Test
void contextLoads() {
    ValueOperations<String, String> operations = template.opsForValue();
    operations.set("c", "xxxxx");   //设置值
    System.out.println(operations.get("c"));   //获取值

    template.delete("c");    //删除键
    System.out.println(template.hasKey("c"));   //判断是否包含键
}

} ```

实际上所有的值的操作都被封装到了ValueOperations对象中,而普通的键操作直接通过模板对象就可以使用了,大致使用方式其实和Jedis一致。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

湿物男

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值