文档章节

Redis学习

victorruan
 victorruan
发布于 2014/07/16 09:52
字数 750
阅读 19
收藏 0

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的方式,获取一个记录的所有内容。所以,就有了下面这种存储方式。

Key Value
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。

Key Value
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".

 

 

本文转载自:http://www.cnblogs.com/victorruan/p/3533943.html

victorruan
粉丝 0
博文 13
码字总数 0
作品 0
徐汇
私信 提问
Lind.DDD.Repositories.Redis层介绍

之前已经发生了 大叔之前介绍过关于redis的文章,有缓存,队列,分布式pub/sub,数据集缓存以及仓储redis的实现等等,而今天在Lind.DDD的持久化组件里,redis当然也有一席之地,作为当今最红...

mcy247
2017/12/07
0
0
Redis 学习路线

学习和使用 Redis 一般可以分为以下四个阶段: 初学者入门 进阶实战 理解原理 贡献和开发 本文接下来将在四个小节里面分别对这四个阶段进行介绍。 初学者入门 如果你只是对 Redis 感兴趣, ...

JackFace
2016/06/17
223
0
Docker Redis FATAL CONFIG FILE ERROR

之前面试经常问到Redis数据库,因为比较菜,没有用过这玩意 有的时候,为了面试,就硬记,抱佛脚,记得有一次面试,问我redis数据结构有哪些? 我想了想,应该和java差不多吧,基础结构都有!!! 就说str...

_大侠__
07/18
94
0
redis的学习和使用

最近自己学习redis,把学习过程中的一些细节整理了一下: redis 安装: 默认端口是6379 # cd /usr/local/src # wget http://download.redis.io/releases/redis-3.0.7.tar.gz #tar zxvf redi...

许兆磊
2016/04/03
342
0
redis学习笔记(一)之安装测试

以前比较懒,虽说都用redis,但大都是别人部署好后进行简单的使用,最近项目上线,时间较空,所以想在系统的学习一下redis,顺便也能熟悉熟悉linux系统(linux小白,也是正在学习阶段,如果有...

憨豆公子
2016/08/08
43
0

没有更多内容

加载失败,请刷新页面

加载更多

实战项目-学成在线(一)

之前看的黑马程序员实战项目之一,打算以博客的形式写出来,也让自己重新温习一下。 1、项目背景 略(就是当前这东西很火,我们重点在开发,这些就略过) 2、功能模块 门户,学习中心,教学管...

lianbang_W
41分钟前
5
0
基于Vue的数字输入框组件开发

本文转载于:专业的前端网站➫基于Vue的数字输入框组件开发 1、概述 Vue组件开发的API:props、events和slots 2、组件代码 github地址:https://github.com/MengFangui/VueInputNumber 效果:...

前端老手
50分钟前
4
0
百度地图根据经纬度获取运动轨迹

<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="initial-scale=1.0, user-scalable=n......

泉天下
52分钟前
5
0
学习记录(day04-axios增删改查、v-for循环、页面加载成功处理函数)

[TOC] 1.1 基本语法:插值表达式 <template> <div> {{username}} <br/> {{1+2+3}} <br/> {{'你的名字是:' + username}} <br/> {{'abc'.split('')}} </div><......

庭前云落
今天
5
0
CentOS Linux 7上将ISO映像文件写成可启动U盘

如今,电脑基本上都支持U盘启动,所以,可以将ISO文件写到U盘上,用来启动并安装操作系统。 我想将一个CentOS Linux 7的ISO映像文件写到U盘上,在CentOS Linux 7操作系统上,执行如下命令: ...

大别阿郎
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部