Redis实现微博后台业务逻辑系列(三)

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Redis 版,经济版 1GB 1个月
简介:

新建用户功能:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import  redis
 
class  User( object ):
     """使用Redis散列键保存用户信息,并尝试登陆"""
     def  __init__( self , client):
         self .client  =  client
         self .key  =  "weibo::email_to_uid"
     
     def  create( self , name, passwd, email):
         """创建用户"""
         # 生成新的ID
         new_id  =  IdGenerator( "weibo::uid" self .client).gen()
         # 生成新用户的键
         user_key  =  "weibo::user::"  +  str (new_id)
         # 创建用户,使用散列键保存用户信息,使用hmset时需要将key、value写成字典格式传递给redis
         self .client.hmset(user_key, { "id" : new_id,  "name" : name,  "passwd" : passwd,  "email" : email})
         # 使用散列键保存email和ID的对应关系
         self .client.hset( self .key, email, new_id)
         return  new_id
 
     def  get_by_id( self id ):
         """根据用户ID返回用户信息"""
         user_key  =  "weibo::user::"  +  str ( id )
         return  self .client.hgetall(user_key)
         
     def  try_login( self , email, passwd):
         """尝试登陆,返回用户信息"""
         uid  =  self .client.hget( self .key, email)
         if  uid  is  None :
             return  None
         
         # 获取用户信息,并将字典内二进制数据转换成字符串数据并重新存储
         user_info  =  self .get_by_id(uid.decode())
         user  =  dict ()
         for  key,value  in  user_info.items():
             user[key.decode()]  =  value.decode()
         
         if  user[ "passwd" = =  passwd:
             return  user
 
             
if  __name__  = =  "__main__" :
     redis_client  =  redis.StrictRedis()
     user  =  User(redis_client)
     uid  =  user.create( "daiby" "abcd1234" "123@qq.com" )
     print (uid)
     user_info  =  user.try_login( "123@qq.com" "abcd1234" )
     print (user_info)

  在这个类里,我们使用Redis散列键的数据结构来存储用户账户信息。为什么要用散列键来存储呢?Redis散列键的结构是:hmset key field value field value ...,这样我们使用"weibo::user::<id>"这个散列键key来保存用户的ID、邮箱、姓名、密码等信息,再使用"weibo::email_to_uid"这个散列键来保存email和id之间的关联关系,为什么要保存email和id之间的关联关系呢?因为我们使用email名登陆时,通过"weibo::email_to_uid"这个散列键,取得对应的ID了。类中我们实现了三个方法:

    1.创建新用户

    2.根据用户ID返回用户信息

    3.尝试登陆,如果登陆成功则返回用户信息

本文转自戴柏阳的博客博客51CTO博客,原文链接http://blog.51cto.com/daibaiyang119/1962658如需转载请自行联系原作者


daibaiyang119

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
NoSQL Java Redis
springboot搭建后台框架 (二)整合Redis
springboot搭建后台框架 (二)整合Redis
51 0
|
8月前
|
NoSQL Linux Redis
linux下后台启动redis
linux下后台启动redis
|
2月前
|
NoSQL Linux Redis
Linux系统中安装redis+redis后台启动+常见相关配置
Linux系统中安装redis+redis后台启动+常见相关配置
|
2月前
|
存储 NoSQL 数据处理
Redis Lua脚本:赋予Redis更强大的逻辑与功能
Redis Lua脚本:赋予Redis更强大的逻辑与功能
|
8月前
|
缓存 NoSQL 中间件
太卷了!京东、微博最新「Redis缓存高手心法手册」竟被开源了
众所周知,分布式架构被广泛应用于企业级应用开发中,以满足高并发、高可用、高性能、高扩展性等要求。
|
11月前
|
存储 监控 Java
基于SpringBoot+Redis+Vue的后台管理系统开源项目,附源码地址
eladmin 是一款基于 Spring Boot 2.1.0 、 Jpa、 Spring Security、redis、Vue 的前后端分离的后台管理系统,项目采用分模块开发方式, 权限控制采用 RBAC,支持数据字典与数据权限管理,支持一键生成前后端代码,支持动态路由。
|
12月前
|
NoSQL Redis 数据库
Redis 常见面试问题 Redis持久化aof后台重写和写时复制
今天有个群里网友问,redis面试被问到aof 后台重写 写时复制,我尝试回答一下
366 5
|
11月前
|
消息中间件 NoSQL Redis
深入探究Redis事务和Lua脚本:实现原子操作与复杂业务逻辑
本篇深入剖析了Redis的事务处理和Lua脚本特性,为读者呈现了如何利用这两个功能来实现数据的原子操作和执行复杂的业务逻辑。我们首先介绍了Redis事务的概念和基本操作,通过MULTI、EXEC、DISCARD和WATCH等命令,展示了如何在一组命令中保持原子性。进一步,我们探讨了事务命令的使用方法,演示了如何在事务中监视键变化以及提交事务。
429 0
|
NoSQL JavaScript 小程序
Redis实现微博好友功能微服务(关注,取关,共同关注)
Redis实现微博好友功能微服务(关注,取关,共同关注)
|
缓存 NoSQL 前端开发
【Go】基于 Gin 从0到1搭建 Web 管理后台系统后端服务(三)路由、自定义校验器和 Redis
【Go】基于 Gin 从0到1搭建 Web 管理后台系统后端服务(三)路由、自定义校验器和 Redis