内容简介:接下来我们需要在我们的项目里面配置下,我们的redis的配置。源码:https://github.com/limingios/wxProgram.git 中的wx-springboot 和 No.15
接下来我们需要在我们的项目里面配置下,我们的 redis 的配置。源码:https://github.com/limingios/wxProgram.git 中的wx-springboot 和 No.15
springboot-wx增加配置
- common 增加一个pom.xml的redis依赖
<!-- 引入 redis 依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.8.7.RELEASE</version> </dependency>
-
common 增加 工具 类RedisOperator
>操作redis的工具类
package com.idig8.utils; import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Component; /** * @Description: 使用redisTemplate的操作实现类 */ @Component public class RedisOperator { // @Autowired // private RedisTemplate<String, Object> redisTemplate; @Autowired private StringRedisTemplate redisTemplate; // Key(键),简单的key-value操作 /** * 实现命令:TTL key,以秒为单位,返回给定 key的剩余生存时间(TTL, time to live)。 * * @param key * @return */ public long ttl(String key) { return redisTemplate.getExpire(key); } /** * 实现命令:expire 设置过期时间,单位秒 * * @param key * @return */ public void expire(String key, long timeout) { redisTemplate.expire(key, timeout, TimeUnit.SECONDS); } /** * 实现命令:INCR key,增加key一次 * * @param key * @return */ public long incr(String key, long delta) { return redisTemplate.opsForValue().increment(key, delta); } /** * 实现命令:KEYS pattern,查找所有符合给定模式 pattern的 key */ public Set<String> keys(String pattern) { return redisTemplate.keys(pattern); } /** * 实现命令:DEL key,删除一个key * * @param key */ public void del(String key) { redisTemplate.delete(key); } // String(字符串) /** * 实现命令:SET key value,设置一个key-value(将字符串值 value关联到 key) * * @param key * @param value */ public void set(String key, String value) { redisTemplate.opsForValue().set(key, value); } /** * 实现命令:SET key value EX seconds,设置key-value和超时时间(秒) * * @param key * @param value * @param timeout * (以秒为单位) */ public void set(String key, String value, long timeout) { redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS); } /** * 实现命令:GET key,返回 key所关联的字符串值。 * * @param key * @return value */ public String get(String key) { return (String)redisTemplate.opsForValue().get(key); } // Hash(哈希表) /** * 实现命令:HSET key field value,将哈希表 key中的域 field的值设为 value * * @param key * @param field * @param value */ public void hset(String key, String field, Object value) { redisTemplate.opsForHash().put(key, field, value); } /** * 实现命令:HGET key field,返回哈希表 key中给定域 field的值 * * @param key * @param field * @return */ public String hget(String key, String field) { return (String) redisTemplate.opsForHash().get(key, field); } /** * 实现命令:HDEL key field [field ...],删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。 * * @param key * @param fields */ public void hdel(String key, Object... fields) { redisTemplate.opsForHash().delete(key, fields); } /** * 实现命令:HGETALL key,返回哈希表 key中,所有的域和值。 * * @param key * @return */ public Map<Object, Object> hgetall(String key) { return redisTemplate.opsForHash().entries(key); } // List(列表) /** * 实现命令:LPUSH key value,将一个值 value插入到列表 key的表头 * * @param key * @param value * @return 执行 LPUSH命令后,列表的长度。 */ public long lpush(String key, String value) { return redisTemplate.opsForList().leftPush(key, value); } /** * 实现命令:LPOP key,移除并返回列表 key的头元素。 * * @param key * @return 列表key的头元素。 */ public String lpop(String key) { return (String)redisTemplate.opsForList().leftPop(key); } /** * 实现命令:RPUSH key value,将一个值 value插入到列表 key的表尾(最右边)。 * * @param key * @param value * @return 执行 LPUSH命令后,列表的长度。 */ public long rpush(String key, String value) { return redisTemplate.opsForList().rightPush(key, value); } }
- api 项目 配置文件内增加内容application.properties
############################################################ # # REDIS 配置 # ############################################################ # Redis数据库索引(默认为0) spring.redis.database=1 # Redis服务器地址 spring.redis.host=47.98.XXX.XXX # Redis服务器连接端口 spring.redis.port=6379 # Redis服务器连接密码(默认为空) spring.redis.password=XXXX # 连接池最大连接数(使用负值表示没有限制) spring.redis.pool.max-active=1000 # 连接池最大阻塞等待时间(使用负值表示没有限制) spring.redis.pool.max-wait=-1 # 连接池中的最大空闲连接 spring.redis.pool.max-idle=10 # 连接池中的最小空闲连接 spring.redis.pool.min-idle=2 # 连接超时时间(毫秒) spring.redis.timeout=0
- api 项目中增加基础的Controller
package com.idig8.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RestController; import com.idig8.utils.RedisOperator; @RestController public class BasicController { @Autowired public RedisOperator redis; /** * 用户session的分类名称 */ public static final String USERS_REDIS_SESSION = "user-redis-session"; /** * 用户session的失效时间 */ public static final long USERS_REDIS_SESSION_TL = 1000*60*30; }
- api 项目中增加RegistLoginController增加userToken
用户登录和注册后,redis内添加对应的userToken信息。
package com.idig8.controller; import java.util.UUID; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import com.idig8.pojo.Users; import com.idig8.pojo.vo.UsersVO; import com.idig8.service.UserService; import com.idig8.utils.JSONResult; import com.idig8.utils.MD5Utils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @RestController @Api(value="用户注册登录的接口",tags={"注册和登录的controller"}) public class RegistLoginController extends BasicController{ @Autowired private UserService userService; @ApiOperation(value="用户注册",notes="用户注册的接口") @PostMapping("/regist") public JSONResult regist(@RequestBody Users user) { //1.判断用户名和密码不能为空 if(StringUtils.isBlank(user.getUsername())||StringUtils.isBlank(user.getPassword())) { return JSONResult.errorMsg("用户名或密码不能为空"); } //2.判断用户名是否存在 boolean usernameIsExist = userService.queryUsernameIsExist(user.getUsername()); if(!usernameIsExist) { user.setNickname(user.getUsername()); try { user.setPassword(MD5Utils.getMD5Str(user.getPassword())); } catch (Exception e) { return JSONResult.errorMsg(e.getMessage()); } user.setFollowCounts(0); user.setReceiveLikeCounts(0); user.setFansCounts(0); userService.saveUser(user); }else { return JSONResult.errorMsg("用户名或已经存在,请更换在试试!"); } UsersVO userVO = setUserRedisSessionToken(user); return JSONResult.ok(userVO); } @ApiOperation(value="用户登录",notes="用户登录的接口") @PostMapping("/login") public JSONResult login(@RequestBody Users user) { //1.判断用户名和密码不能为空 if(StringUtils.isBlank(user.getUsername())||StringUtils.isBlank(user.getPassword())) { return JSONResult.errorMsg("用户名或密码不能为空"); } //2.判断用户名是否存在 Users userObject = userService.queryUserIsExist(user); if(userObject==null){ return JSONResult.errorMsg("用户名或密码不存在!"); } UsersVO userVO = setUserRedisSessionToken(userObject); return JSONResult.ok(userVO); } public UsersVO setUserRedisSessionToken(Users userModel) { String uniqueToken = UUID.randomUUID().toString(); redis.set(USERS_REDIS_SESSION + ":" + userModel.getId(), uniqueToken, USERS_REDIS_SESSION_TL); UsersVO userVO = new UsersVO(); BeanUtils.copyProperties(userModel, userVO); userVO.setUserToken(uniqueToken); return userVO; } }
启动小程序
- 注册页面
- 输入要注册的用户名和密码查看返回
-
redis内容发生了增加
>redis里面的值和我们前端设置的userToken唯一的值维系了两个之间的关系,这就是一种无状态的session,
-
登录页面
>使用刚才注册的一个用户名,进行登录
- 输入要用户名和密码查看返回
redis 增加冒号的作用:
进行分类,缓存到同一个文件夹方便查看数据。前面一个分类名称中间一个冒号,丢到缓存里面。
PS:这就是本次springboot的redis-session的使用。
>>原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!
>>原文链接地址:
以上所述就是小编给大家介绍的《「小程序JAVA实战」开发用户redis-session(39)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 「小程序JAVA实战」小程序搜索功能(54)
- 「小程序JAVA实战」小程序视频封面处理(47)
- 「小程序JAVA实战」小程序开源搜索组件(52)
- 「小程序JAVA实战」小程序的关注功能(64)
- 「小程序JAVA实战」小程序注册界面的开发(29)
- 「小程序JAVA实战」小程序数据缓存API(53)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Fluent Python
Luciano Ramalho / O'Reilly Media / 2015-8-20 / USD 39.99
Learn how to write idiomatic, effective Python code by leveraging its best features. Python's simplicity quickly lets you become productive with it, but this often means you aren’t using everything th......一起来看看 《Fluent Python》 这本书的介绍吧!