Spring boot基于redis实现附近的人(附源码下载)

此文章是针对去年写的Java基于Redis实现“附近的人 进行业务优化!

核心源码

public class NearbyPO {
	@NotNull(message = "id值不能为空")
	private Integer id;
	@NotBlank(message = "名称不能为空")
	private String name;
	@NotNull(message = "城市编码不能为空")
	private Integer cityCode;
	@NotNull(message = "地区编码不能为空")
	private Integer adCode;
	@NotNull(message = "经度不能为空")
	private Double longitude;
	@NotNull(message = "纬度不能为空")
	private Double latitude;

	/**
	 * 保存时间,不依赖前端传参
	 */
	private Long saveTime;
}
// 附近的人最新版
public Result<List<NearbyBO>> nearbyNew(NearbyPO paramObj) {
	// 缓存key值
	String cacheKey = String.format(NEARBY_CACHE_KEY, paramObj.getCityCode(), paramObj.getAdCode());
	long currentTimeMillis = System.currentTimeMillis();

	// 设置当前用户缓存时间
	paramObj.setSaveTime(currentTimeMillis);

	// 使用hash更加快速的定位到用户缓存信息,便于删除更新
	redisDao.hset(cacheKey, paramObj.getId() + "", JSONObject.toJSONString(paramObj));

	// 从当前地区缓存中获取全部用户(包括用户自己)
	Map<String, String> cacheAll = redisDao.hGetAll(cacheKey);
	if (cacheAll.isEmpty() || cacheAll.size() == 1) {
		return new Result<List<NearbyBO>>(true, new ArrayList<>());
	}

	// 结果集,-1是要排除用户自己
	List<NearbyBO> result = new ArrayList<NearbyBO>(cacheAll.size() - 1);

	for (String item : cacheAll.keySet()) {
		NearbyPO cacheData = JSONObject.parseObject(cacheAll.get(item), NearbyPO.class);

		// 计算缓存时长
		long twoDayMinute = (cacheData.getSaveTime() - currentTimeMillis) / 60000;
		// 八小时有效
		if (twoDayMinute > 480) {
			// 被动触发删除过期缓存
			redisDao.hdel(cacheKey, paramObj.getId() + "");
			continue;
		}
		// 排除用户自己
		if (paramObj.getId().equals(cacheData.getId())) {
			continue;
		}
		// 计算两坐标点距离
		double distance = countDistance(paramObj.getLongitude(), paramObj.getLatitude(), cacheData.getLongitude(),
				cacheData.getLatitude());
		// 10KM之内有效
		if (distance > 10000) {
			continue;
		}
		result.add(new NearbyBO(cacheData.getId(), cacheData.getName(), distance));
	}
	return new Result<List<NearbyBO>>(true, result);
}

源码下载(资源1分,包含去年的实现源码):https://download.csdn.net/download/qq_19260029/10701010
,没有积分的可评论留下邮箱私发。

测试访问地址:

  1. http://localhost:8080/nearby_new?id=1&name=不羁鱼&cityCode=440300&adCode=440305&longitude=113.9672334290&latitude=22.5829485425
  2. http://localhost:8080/nearby_new?id=2&name=王力宏&cityCode=440300&adCode=440305&longitude=113.9672334290&latitude=22.5229485425

end

推荐文章:
MyBatis基于Spring-boot集成通用Mapper以及pagehelper分页插件
RedisDesktopManager连接远程Linux系统的Redis服务
Spring boot基于Redis缓存商城分类,商品信息

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Spring Boot是一个用于快速开发Java应用程序的开源框架,Shiro是一个强大且易于使用的Java安全框架,Redis是一个开源的内存数据库。结合使用这些技术可以实现单点登录功能。 在Spring Boot中使用Shiro来处理认证和授权,可以通过配置Shiro的Realm来实现用户的登录认证和权限控制。将用户的信息存储在Redis中,利用Redis的持久化特性来实现用户登录状态的共享和存储。 首先,在Spring Boot项目的配置文件中配置Redis的连接信息,以便连接到Redis数据库。 然后,创建一个自定义的Shiro的Realm,在其中重认证和授权的方法。在认证方法中,将用户的登录信息存储到Redis中,以便其他服务可以进行验证。在授权方法中,根据用户的角色和权限进行相应的授权操作。 接着,在Spring Boot项目的配置类中配置Shiro的相关设置,包括Realm、Session管理器、Cookie管理器等。 最后,可以在Controller层中使用Shiro的注解来标记需要进行认证和授权的接口,以确保只有登录后且具备相应权限的用户才能访问这些接口。 总的来说,通过使用Spring Boot、Shiro和Redis的组合,可以实现单点登录的功能。用户在登录后,将登录信息存储到Redis中,其他服务可以通过验证Redis中的数据来判断用户的登录状态。同时,Shiro提供了强大的认证和授权功能,可以确保只有具备相应权限的用户才能访问受保护的接口。这些功能的具体实现可以通过深入研究Spring Boot、Shiro和Redis源码来了解。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值