zoukankan      html  css  js  c++  java
  • Redis学习

    2014-01-26 09:37:38

    来公司快半年了,还有几天就快回家了,好开心。今天我准备梳理下redis的相关内容。

    1.Redis是什么

     简单来讲,Redis就是一个key-value数据库,适合所有数据in-memory的场景。

    2.Redis常用数据类型

    Redis最常用的数据类型主要是下面5种:

    • string
    • hash
    • list
    • set
    • sorted set

    3.Redis里可以有表么

     在使用redis的时候,会和使用sql表有很大区别,我们没有语句去操控redis服务,有的仅仅是一些简单的命令。这些命令是数据类型敏感的,比如我们把set命令使用在list上,就会得到一个错误。我们来考虑一个简单的sql表。

    id username password name surname
    1 user1 pass1 Bob Smith
    2 user2 pass2 Mario Rossi

     我们如何才能把这个简单的sql表存到Redis中呢?在sql结构中,我们可以使用select id的方式,获取一个记录的所有内容。所以,就有了下面这种存储方式。

    KeyValue
    user:1:username user1
    user:1:password pass1
    user:1:name Bob
    user:1:surname Smith
    user:2:username user2
    user:2:password pass2
    user:2:name Mario
    user:2:surname Rossi

    现在,给定一个用户的id,我们就可以通过 user:1:username,user:1:password,user:1:name,user:1:surname1这种方式去获取所有数据了。

    如果上面的数据用来支持一个登陆程序,则给定一个用户名,我们也需要去获取整条纪录的信息。这时候最好的方式是建立一个映射关系user-id。即给我们的数据设计添加一个keys, user:username:id。

    KeyValue
    user:user1:id 1
    user:user2:id 2

     所以,如果此时Mario Rossi登陆我们的系统,我们就可以根据他提供的用户名获取id,从而获取他的整个用户信息。

    另外一个问题是,我们如何去保证主键的唯一性。在sql世界中,我们可以通过 "id int primary key auto_increment",的方式解决主键问题。在Redis中,我们对应的解决方式是增加一个keys:"user:next_id",把这个key作为一个counter,当我们新增一个user时,可以通过INCR command来手动获取这个id。

    在sql中,如果 select * from users:就可以获取整张表的数据。为了实现这个功能,我们可以怎么做呢?也许你会觉得,上面的规则,已经足够我们获取所有的数据了。通过0到user:next_id的所有ids,就可以了。但是如果有用户数据被删除了,我们就不能按照上面的做法来做了。

    比较好的解决方式是再增加一个key, user:list 用来存储所有在用的记录的id。不用的id,就直接从这个list里删掉。

    最后,当我们删除一个用户的时候,我们需要删除 all the keys user:id:*, user:username:id and the id in "user:list".

  • 相关阅读:
    Office 365开发环境概览
    Office 365开发概述及生态环境介绍(二)
    介绍Office 365 中文用户社区 4.0
    学习一点Markdown的基本知识
    Office 365开发概述及生态环境介绍(一)
    如何完全卸载OneDrive (Windows 10 64bit)
    国内版Office 365和Azure AAD绑定的问题及解决方案
    Office 365常见问题解答(第一期)
    招聘视音频工程师
    信念、思考、行动-谈谈程序员返回家乡的创业问题
  • 原文地址:https://www.cnblogs.com/victorruan/p/3533943.html
Copyright © 2011-2022 走看看