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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介:

新建用户功能:

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
相关文章
|
6月前
|
NoSQL Java Redis
springboot搭建后台框架 (二)整合Redis
springboot搭建后台框架 (二)整合Redis
72 0
|
12月前
|
NoSQL Linux Redis
linux下后台启动redis
linux下后台启动redis
126 0
|
6月前
|
NoSQL Linux Redis
Linux系统中安装redis+redis后台启动+常见相关配置
Linux系统中安装redis+redis后台启动+常见相关配置
|
2月前
|
NoSQL Linux 测试技术
redis的安装步骤及前台,后台redis服务启动
这篇文章介绍了Redis的安装步骤,包括在Linux系统中下载、传输、解压、编译、安装Redis,以及Redis服务的前台和后台启动方法。
redis的安装步骤及前台,后台redis服务启动
|
4月前
|
存储 缓存 NoSQL
Redis性能优化问题之优化 Redis fork 耗时严重的问题,如何解决
Redis性能优化问题之优化 Redis fork 耗时严重的问题,如何解决
|
4月前
|
缓存 NoSQL Redis
Redis性能优化问题之当Redis内存达到maxmemory后,淘汰数据的逻辑是怎样的
Redis性能优化问题之当Redis内存达到maxmemory后,淘汰数据的逻辑是怎样的
|
6月前
|
存储 NoSQL 数据处理
Redis Lua脚本:赋予Redis更强大的逻辑与功能
Redis Lua脚本:赋予Redis更强大的逻辑与功能
137 0
|
12月前
|
缓存 NoSQL 中间件
太卷了!京东、微博最新「Redis缓存高手心法手册」竟被开源了
众所周知,分布式架构被广泛应用于企业级应用开发中,以满足高并发、高可用、高性能、高扩展性等要求。
|
NoSQL Redis 数据库
Redis 常见面试问题 Redis持久化aof后台重写和写时复制
今天有个群里网友问,redis面试被问到aof 后台重写 写时复制,我尝试回答一下
436 8
基于SpringBoot+Redis+Vue的后台管理系统开源项目,附源码地址
eladmin 是一款基于 Spring Boot 2.1.0 、 Jpa、 Spring Security、redis、Vue 的前后端分离的后台管理系统,项目采用分模块开发方式, 权限控制采用 RBAC,支持数据字典与数据权限管理,支持一键生成前后端代码,支持动态路由。