Redis与Java整合及高级应用篇

本文介绍了Redis作为一款高性能的Key-Value数据库,包括其非关系型特性和优势,与Memcached的区别,以及如何在SpringBoot中操作Redis。深入探讨了Redis的事务、流水线、发布订阅功能,并讨论了超时时间的重要性。文章适合初学者和进阶开发者,以加深对Redis的理解和应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,redis是什么?

​ 首先数据库分为关系型数据库和非关系型数据库,关系型数据库是采用关系模型来组织数据的数据库,简单来说就是二维表格模型,同时保证事务的一致性。

​ 相反非关系型数据库采用key-value形式进行存储,是一种数据结构化存储方法的集合,具有分布式性质。

​ Redis是当前比较热门的NOSQL系统之一,它是一个开源的使用ANSI c语言编写的key-value存储系统(区别于MySQL的二维表格的形式存储。)遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

二,redis的优势

​ 1,性能快:redis读取的速度是110000次/s,写的速度是81000次/s。

​ 2,丰富的数据类型:string(字符串);list(列表);hash(哈希),set(集合);zset(有序集合)等。

​ 3,原子性:Redis的所有操作都是原子性的,且多个客户端同时访问redis客户端可获得更新后的值。

​ 4,持久化:集群(主从复制,分布式)。

三,redis与Memcached区别(经典面试题)

1 、redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储类型。memcache支持简单的数据类型,String,同时还可以缓存图片,视频。

2 、Redis支持数据的备份,即master-slave模式的数据备份(主从复制)。

3 、Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

4、 redis的速度比memcached快很多

5、Memcached是多线程,非阻塞IO复用的网络模型;Redis使用单线程的IO复用模型。

6,数据安全性:memcache挂掉后,数据便消失;redis可以定期保存到磁盘(持久化)。

四,redis常用命令及springboot操作redis

4.1,引入依赖包。

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

4.2,常用命令与代码整合操作。

注意:redis默认使用JDK序列化方式

​ 更多详细命令,请参考Redis中文网:https://www.redis.net.cn/

4.3,字符串操作类型。

/**
 * String - 字符串类型的操作方式
 * redisTemplate.opsForValue()
*/
	@Test
	public void stringType(){
   
		//	改为String序列化方式
		redisTemplate.setKeySerializer(new StringRedisSerializer());
		redisTemplate.setValueSerializer(new StringRedisSerializer());

		//	redis命令:set key value
		redisTemplate.opsForValue().set("age", "19");

		// redis命令:get key
		String age = (String) redisTemplate.opsForValue().get("age");
		System.out.println("-->" + age);

		// redis命令:mset key value key value ...
		Map<String, Object> map = new HashMap<>();
		map.put("key1", "value1");
		map.put("key2", "value2");
		map.put("key3", "value3");
		redisTemplate.opsForValue().multiSet(map);

		// redis命令:mget key key key...
		List<String> keys = new ArrayList<>();
		keys.add("key1");
		keys.add("key2");
		keys.add("key3");
		List values = redisTemplate.opsForValue().multiGet(keys);
		System.out.println("mget -->" + values);

		// redis命令:del key
		Boolean boo = redisTemplate.delete("key1");

		// redis命令:strlen key - 可能会因为序列化的原因造成长度不准
		Long resultLong = redisTemplate.opsForValue().size("age");
		System.out.println("strlen --> " + resultLong);

		// redis命令:getset key value
		String oldValue = (String) redisTemplate.opsForValue().getAndSet("age", "25");
		System.out.println("getset --> " + oldValue);

		// redis命令:getrange key start end - 可能会因为序列化的原因造成长度不准
		String age1 = redisTemplate.opsForValue().get("age", 0, 1);
		System.out.println("getrange --> " + age1);

		// redis命令:append - 可能会因为序列化的原因造成长度不准
		Integer age2 = redisTemplate.opsForValue().append("age", "26");
		System.out.println("append --> " + age2);<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值