SpringDataRedis小demo

概念

Redis

1.Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。(这里可以理解为我们在电脑上安装的redis)
2. Redis是当今基本所有互联网产品都在使用的一种提供键值对形式的内存数据库。之所以说是内存数据库,是因为redis基于内存的读取和写入相比传统的数据库基于磁盘IO快上数倍。于是乎redis在现在的应用中使用的非常广泛。主要的作用在于:
(1)提供缓存服务,存储访问频率高的热数据防止穿透到数据库
(2)在分布式系统中可以作为实现分布式锁的一种实现方案

Jedis

Jedis是redis的java客户端,它集成了redis的一些命令操作,通过它可以对redis进行操作,提供了连接池管理。(这里可以理解为我们引用的jar包)

SpringDataRedis

Spring-data-redis为spring-data模块中对redis的支持部分,简称为“SDR”,提供了基于jedis客户端API的高度封装以及与spring容器的整合,使得在Spring应用中读写Redis数据库更加容易

关系

redis的客户端有两种实现方式:
一是可以直接调用jedis来实现
二是可以使用spring data redis,通过spring的封装来调用

关系结构如图所以

demo

pom

Spring+jedis+SpringDataRedis

  <dependencies>
  <!-- Spring -->
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-context</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-beans</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-webmvc</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-jdbc</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-aspects</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-jms</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-context-support</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-test</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>junit</groupId>
				<artifactId>junit</artifactId>
				<version>4.9</version>
			</dependency>
		    <!-- 缓存 -->
		    <dependency>
				<groupId>redis.clients</groupId>
				<artifactId>jedis</artifactId>
				<version>2.8.1</version>
			</dependency>
			<dependency>
				<groupId>org.springframework.data</groupId>
				<artifactId>spring-data-redis</artifactId>
				<version>1.7.2.RELEASE</version>
			</dependency>
  
  </dependencies>
  
  
</project>

配置文件

properties文件+xml文件

properties(这里需要注意空格这个坑)

# Redis settings 
# server IP 
redis.host=127.0.0.1
# server port 
redis.port=6379
# server pass 
redis.pass=
# use dbIndex 
redis.database=1
# 最大空闲数
redis.maxIdle=300
#连接时的最大等待毫秒数
redis.maxWait=3000
#在提取一个jedis实例时,是否提前进行验证操作;如果为true,则得到的jedis实例均是可用的;
redis.testOnBorrow=true

xml文件

   <context:property-placeholder location="classpath*:properties/*.properties" />   
  
   <!-- redis 相关配置 --> 
   <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">  
     <property name="maxIdle" value="${redis.maxIdle}" />   
     <property name="maxWaitMillis" value="${redis.maxWait}" />  
     <property name="testOnBorrow" value="${redis.testOnBorrow}" />  
   </bean>  
  
   <bean id="JedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" 
       p:host-name="${redis.host}" p:port="${redis.port}" p:password="${redis.pass}" p:pool-config-ref="poolConfig"/>  
   
   <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">  
    	<property name="connectionFactory" ref="JedisConnectionFactory" />  
   </bean>  
      
</beans>  

ValueOperations:简单K-V操作

//后面的几个例子相同的部分就省略写了
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:spring/applicationContext-redis.xml")
public class TestValue {
	
	@Autowired
	private RedisTemplate redisTemplate;
	
	@Test
	public void setValue(){
		redisTemplate.boundValueOps("name").set("itcast");
	}
	
	@Test
	public void getValue(){
		String str = (String) redisTemplate.boundValueOps("name").get();
		System.out.println(str);		
	}
	
	@Test
	public void deleteValue(){
		redisTemplate.delete("name");
	}

}

SetOperations:set类型数据操作

public class TestSet {
	
	@Autowired
	private RedisTemplate redisTemplate;
	
	@Test
	public void setValue(){
		redisTemplate.boundSetOps("nameset").add("曹操");
		redisTemplate.boundSetOps("nameset").add("刘备");
		redisTemplate.boundSetOps("nameset").add("孙权");		
	}
	
	@Test
	public void getValue(){
		Set set = redisTemplate.boundSetOps("nameset").members();
		System.out.println(set);		
	}
	
	@Test
	public void removeValue(){
		redisTemplate.boundSetOps("nameset").remove("孙权");
	}
	
	@Test
	public void delete(){
		redisTemplate.delete("nameset");
	}

}

HashOperations:针对map类型的数据操作

	@Autowired
	private RedisTemplate redisTemplate;
	
	/**
	 * 存值
	 */
	@Test
	public void testSetValue(){
		redisTemplate.boundHashOps("namehash").put("a", "唐僧");
		redisTemplate.boundHashOps("namehash").put("b", "悟空");
		redisTemplate.boundHashOps("namehash").put("c", "八戒");
		redisTemplate.boundHashOps("namehash").put("d", "沙僧");
		
	}
	
	/**
	 * 获取所有的key
	 */
	@Test
	public void testGetKes(){
		Set keys = redisTemplate.boundHashOps("namehash").keys();
		System.out.println(keys);
	}
	
	/**
	 * 获取所有的值
	 */
	@Test
	public void testGetValues(){
		List list = redisTemplate.boundHashOps("namehash").values();
		System.out.println(list);
	}
	
	/**
	 * 根据KEY取值
	 */
	@Test
	public void searchValueByKey(){
		String str = (String) redisTemplate.boundHashOps("namehash").get("b");
		System.out.println(str);
	}
	
	/**
	 * 移除某个小key的值
	 */
	@Test
	public void removeValue(){
		redisTemplate.boundHashOps("namehash").delete("c");
	}
	
}

ListOperations:针对list类型的数据操作

public class TestList {
	
	@Autowired
	private RedisTemplate redisTemplate;
	
	/*
	 * 右压栈 : 后添加的元素排在后边
	 */
	@Test
	public void testSetValue1(){
		redisTemplate.boundListOps("namelist1").rightPush("刘备");
		redisTemplate.boundListOps("namelist1").rightPush("关羽");
		redisTemplate.boundListOps("namelist1").rightPush("张飞");
	}
	
	/**
	 * 显示右压栈的值
	 */
	@Test
	public void testGetValue1(){
		List list = redisTemplate.boundListOps("namelist1").range(0, 10);
		System.out.println(list);
	}
	
	@Test
	public void delete(){
		redisTemplate.delete("namelist1");
	}
	
	/**
	 * 左压栈
	 */
	@Test
	public void testSetValue2(){
		redisTemplate.boundListOps("namelist2").leftPush("刘备");
		redisTemplate.boundListOps("namelist2").leftPush("关羽");
		redisTemplate.boundListOps("namelist2").leftPush("张飞");
	}
	
	/**
	 * 显示左压栈的值
	 */
	@Test
	public void testGetValue2(){
		List list = redisTemplate.boundListOps("namelist2").range(0, 10);
		System.out.println(list);
	}
	
	/**
	 * 删除值
	 */
	@Test
	public void removeValue(){
		redisTemplate.boundListOps("namelist1").remove(0, "刘备");
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,以下是在 Ubuntu 上使用 Spring Boot 和 Redis 执行 Geo 相关操作的示例: 1. 安装 Redis 和 Java 在 Ubuntu 上安装 Redis 和 Java,可以使用以下命令: ``` sudo apt-get update sudo apt-get install redis-server sudo apt-get install default-jre ``` 2. 创建 Spring Boot 项目 使用以下命令创建一个 Spring Boot 项目: ``` spring init --dependencies=web,data-redis myproject ``` 这将创建一个名为 `myproject` 的 Spring Boot 项目,并添加 Redis 和 Web 依赖项。 3. 添加 Redis 配置 在 `src/main/resources` 目录下创建名为 `application.properties` 的文件,并添加以下 Redis 配置: ``` spring.redis.host=localhost spring.redis.port=6379 ``` 这将告诉 Spring Boot 使用本地 Redis 数据库。 4. 编写控制器 在 `src/main/java` 目录下创建一个名为 `MyController` 的控制器,并添加以下代码: ```java import org.springframework.data.redis.connection.RedisGeoCommands; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.geo.GeoLocation; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class MyController { private final RedisTemplate<String, String> redisTemplate; public MyController(RedisTemplate<String, String> redisTemplate) { this.redisTemplate = redisTemplate; } @GetMapping("/addGeo") public void addGeo() { redisTemplate.opsForGeo().add("mylocations", new GeoLocation<>("New York", new RedisGeoCommands.GeoLocation<>(-74.005974, 40.712776))); redisTemplate.opsForGeo().add("mylocations", new GeoLocation<>("Paris", new RedisGeoCommands.GeoLocation<>(2.352222, 48.856614))); } } ``` 控制器中的 `addGeo` 方法将使用 RedisTemplate 实例将两个地理位置添加到名为 `mylocations` 的 Redis Geo 集合中。 5. 运行应用程序 在终端中导航到项目目录并运行以下命令: ``` ./mvnw spring-boot:run ``` 这将启动应用程序并将其绑定到默认端口(8080)。 6. 测试应用程序 使用 curl 或浏览器访问 `http://localhost:8080/addGeo`,将两个地理位置添加到 Redis Geo 集合中。 可以使用以下命令在 Redis 命令行中查看集合的成员: ``` 127.0.0.1:6379> GEORADIUS mylocations 15 37.618423 55.751244 km ``` 这将返回距离(37.618423,55.751244)坐标 15 公里内的成员列表。 这就是在 Ubuntu 上使用 Spring Boot 和 Redis 执行 Geo 相关操作的简单示例。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值