《Redis实战》--读书笔记--第1章

《Redis实战》--读书笔记

时间:2017年10月02日01:13:48

第1章

共有五种结构

①String②List③SET④HASH⑤ZSET(有序集合)

①String(字符串)

数据结构为:

+--hello(键名)----string(值的类型)-----+
|   world(值)                        |
|                                    |
+---------------+--------------------+

其中有以下操作命令

命令 行为
set 获取存储在给定键中的值
get 设置存储在给定键中的值
del 删除存储在给定键中的值(这个命令可以用于所有类型)

②List(列表)

一个列表结构可以有序地存储多个字符串。

+--list-key(键名)---------list---+
|item                           |
|item2                          |
|item                           |
|                               |
+-------------------------------+

操作办法

命令 行为
rpush 将给定值推入列表的右端
lrange 获取列表在给定范围上的所有值
lindex 获取列表在给定位置上的单个元素
lpop 从列表的左端弹出一个值,并返回被弹出的值

③Set(集合)

​ redis的集合和列表都可以存储多个字符串,他们之间的不同在于,列表可以存储多个相同的字符串,而集合则通过使用散列表来保重自己存储的每个字符串都是不同的(这些散列表只有键,但没有与键相关联的值)。

数据结构

+--list-key(键名)---------set---+
|item                           |
|item2                          |
|item3                          |
|                               |
+-------------------------------+

不可重复。

命令 行为
sadd 将给定元素添加到集合
smembers 返回集合包含的所有元素
sismembers 检查给定元素是否存在于集合中
srem 如果给定的元素存在于集合中,那么移除这个元素

④Hash(散列,也就是Java中的Map)

​ Redis的散列可以存储多个键值对之间的映射。和字符串一样,散列存储的值既可以是字符串又可以是数字值,并且用户同样可以对散列存储的数字值执行自增操作或者自减操作。

数据结构:

+--hash-key------------------hash---+
|sub-key1       |   value1          |
|sub-key2       |   value2          |
|sub-key3       |   value3          |
|               |                   |
+---------------+-------------------+
命令 行为
hset 在散列里面关联起给定的键值对
hget 获得指定散列键的值
hgetall 获取散列包含的所有键值对
hdel 如果给定键存在于散列里面,那么移除这个键

⑤Zset(有序集合)

​ 有序集合和散列一样,都用于存储键值对:有序集合的键被称为成员(member),每个成员都是各不相同的;而有序集合的值则被称为分值(score),分值必须为浮点数。有序集合是redis里面唯一一个既可以根据成员访问元素,又可以根据分值以及分值的排列顺序来访问元素的结构。

数据结构:

+--zset-key--------zset-+
|member1        |   728 |
|member2        |   982 |
|               |       |
+---------------+-------+
命令 行为
zadd 将一个带有给定分值的成员添加到有序集合里面
zrange 根据元素在有序排列中所处的位置,从有序集合里面获取多个元素
zrangebyscore 获取有序集合在给定分值范围内的所有元素
zrem 如果给定成员存在于有序集合,那么移除这个成员

收获一、在redis中实现原子性自增或自减

例如一个Map中,假设为文章article:1,有一个属性为votes(用户投票数)。此时用户给他投了一票。那么我就可以使用hincrby函数使此字段自增加一。

+--article:1---------------------hash---+   +--article:1---------------------hash---+
|title          |   Go to statement     |   |title          |   Go to statement     |
|               |   considered harmful  |   |               |   considered harmful  |
|link           |   http://goo.gl/kZUSu |   |link           |   http://goo.gl/kZUSu |
|poster         |   user:83271          |   |poster         |   user:83271          |
|time           |   1331382699.33       |   |time           |   1331382699.33       |
|votes          |   528                 |==>|votes          |   529                 |
|               |                       |   |               |                       |
+---------------+-----------------------+   +---------------+-----------------------+
conn.hincrby('article:1','votes',1)

而我们不需要将此字段从redis中取出,也不需要重新执行+1的操作,也不需要保证事务的原子性,因为函数本身保证了事务的原子性。votes即变为529

同样的,在一个有序集合中,我们需要对某一个有序集合中的某一个元素的score执行增加操作,同样可以调用另一个类似的方法:

+--score:--------------------zset---+           +--score:--------------------zset---+
|article:1      |   1332164063.49   | =========>|article:1      |   1332164495.49   |
|articel:100    |   1332174713.47   |           |articel:100    |   1332174713.47   |
|···            |                ···|           |···            |                ···|
+---------------+-------------------+           +---------------+-------------------+
conn.zincrby('score:','article:1',432)

这样,我们就对score:这个有序集合中的article:1对象的score增加了432的权重。


收获二、一次性赋值Map函数—hmset

我们一般对Map进行操作都是使用put。但是如果多次对redis中的hash进行put,既浪费性能也浪费时间。故如果我们需要对redis中的hash进行键值对赋入的话,可以使用hmset函数。

conn.hmset('article:22',{
  'title':title,
  'link':link,
  'poster':poster,
  'time':now,
  'votes':1
})

如上代码:实现了对article:1的初始化各个属性值。

即:

+--article:22--------hash---+
|title          |   title   |
|link           |   link    |
|poster         |   poster  |
|time           |   now     |
|votes          |   1       |
|               |           |
+---------------+-----------+

收获三、集合和有序集合取交集

假设第一个set集合名字叫做groups:programming,里面存储的是文章的分类,例如科技板块文章三篇。

第二个有序集合名字叫做score:,里面存储的是所有文章的评分。

+--groups:programming-----set---+   +--score:----------------zset-------+
| article:92617                 |   |article:83729  |   1330425826.28   |
| article:100408                |   |article:92617  |   1331147511.67   |
| article:83729                 |   |article:100635 |   1332164063.49   |
|                               |   |article:100408 |   1332174713.47   |
+-------------------------------|   |article:100716 |   1332225027.26   |
                                    |···            |               ··· |
                                    |               |                   |
                                    +---------------+-------------------+

现在执行zinterstore操作

conn.zinterstore('score:programming', ['groups:programming','score:'], aggregate=max)

这样左联即可得到一个新的zset名为score:programming

+--score:programming--------zset---+
|article:83729  |   1330425826.28   |
|article:92617  |   1331147511.67   |
|article:100408 |   1332174713.47   |
|               |                   |
+---------------+-------------------+

以此来实现左联的效果,实现了指定文章的群组查看这些文章的评分。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容