Redis实战读书笔记_Redis的5种数据结构

https://github.com/josiahcarlson/redis-in-action 对应java等语言的代码

http://redis.io/commands  //查询Redis命令的官网


1.2 redis数据结构简介


1.2.1 Redis中的字符串

1)SET -设置键值对

官网说明:

SET key value[expiration EX seconds|PX milliseconds] [NX|XX]  

Set key to hold the string value. If key already holds a value, it is overwritten, regardless of its type. Any previous time to live associated with the key is discarded on successful SET operation.

Options Starting with Redis 2.6.12 SET supports a set of options that modify its behavior:EX seconds -- Set the specified expire time, in seconds.PX milliseconds -- Set the specified expire time, in milliseconds.NX -- Only set the key if it does not already exist.XX -- Only set the key if it already exist.Note: Since the SET command options can replace SETNX, SETEX, PSETEX, it is possible that in future versions of Redis these three commands will be deprecated and finally removed.

Return Value:

Simple string reply: OK if SET was executed correctly. Null reply: a Null Bulk Reply is returned if the SET operation was not performed because the user specified the NX or XX option but the condition was not met. 


    命令格式:

      SET key value [expiration EX seconds|PX milliseconds]    [NX|XX]

e.g 1

SET hello  world

简单的set命令

e.g 2 在存储键值对时指定过期时间和策略:

         set mykey Hello EX 150 NX

指定过期时间


2)GET -  获取指定键对应得值

   官网说明:

GET key

Get the value of key. If the key does not exist the special value nil is returned. An error is returned if the value stored at key is not a string, because GET only handles string values.

Return value:

Bulk string reply: the value of key, or nil when key does not exist.


命令格式:

   GET key

e.g  1

    get  hello

get命令使用


1.2.2 使用Redis存储链表

链表操作的命令:

    LPUSH      //将元素推入链表的左端

    RPUSH      // 将元素推入链表的右端

    LPOP        //从链表的左端弹出元素

    RPOP       //从链表的右端弹出元素

    LINDEX      //从链表的指定位置上获取一个元素

    LRANGE     //获取链表指定范围上的所有元素

例子:

向名为list-key的链表中插入3个元素:

    rpush list-key item1

    rpush list-key item2

    rpush list-key  item3

向list-key链表中插入3个元素



取出链表中的所有元素:

命令: 

  lrange list-key   0   -1


aliyun_mine:0>lrange list-key 0 -1

1)  "item1"

2)  "item2"

3)  "item3"

aliyun_mine:0>


取出链表中的所有元素


取出链表中角标为1的元素:

命令:

    lindex list-key 1


取出角标1下的元素


1.2.3 Redis的set集合

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

 Redis的set集合使用无序方式存储元素。

命令:

    sadd    //使用sadd命令将元素添加到set集合中

    srem    //使用srem命令将元素从set集合中移除。

    sismember  //使用sismember 命令可以快速地检查一个元素是否存在于set集合中

    smembers  //使用smembers命令可以获取set集合中的所有元素


例子:

    创建一个set集合,并向其中添加三个元素se1、 se2、 se3。


向set集合中加入3个元素

#获取set集合中的所有元素:

命令:

  SMEMBERS  key

例子:

smembers set-key


获取set集合中的所有元素

#判断se4是否存在于set-key集合中

命令:

SISMEMBER  key   element 

例子:


查看set-key集合中是否存在s4元素


#把se3从set集合中移除

srem set-key se3


从集合中移除元素


1.2.4 Redis的散列hash


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

   向散列中插入元素

  从散列中获取元素

  从散列中移除元素

#创建一个名为hash-key的散列,并向其中添加一个sub-key1 value1的键值对:

hset hash-key sub-key1 value1 #hset命令会返回一个值来表示给定的键是否已经存在于散列里面


向hash里面添加三个键值对


#获取散列中的所有值:

命令:

hgetall hash-key


获取散列中的所有值

#从散列里面获取某个键的值:

命令:

   hget hash-key sub-key1


从散列里面获取某个键的值

#从散列里面删除键值对

命令:

hdel hash-key sub-key1


从散列里面删除指定的键值对


1.2.5 Redis的有序集合zset


有序集合zset的元素由俩部分构成:

      (1)  键member

      (2)  分值score

操作zset的命令:

   ZADD #将一个带有给定分值的成员添加到有序集合里面

  ZRANGE    #根据元素在有序集合中的位置,从有序集合中获取多个元素

  ZRANGEBYSCORE  #获取有序集合在给定分值范围内的所有元素

  ZREM        #移除

#创建一个zset-key有序集合,并向其中添加3个元素

   zadd zset-key 728 member1

  zadd  zset-key 982  member0

  zadd  zset-key 982  member0


向zset-key集合中添加3个元素

取出有序集合中的所有元素:

ZRANGE zset-key 0 -1 withscores


取出zset-key有序集合中的所有元素

#移除键为 member1的元素:

zrem zset-key member1


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

推荐阅读更多精彩内容

  • NOSQL类型简介键值对:会使用到一个哈希表,表中有一个特定的键和一个指针指向特定的数据,如redis,volde...
    MicoCube阅读 3,958评论 2 27
  • 1 Redis介绍1.1 什么是NoSql为了解决高并发、高可扩展、高可用、大数据存储问题而产生的数据库解决方...
    克鲁德李阅读 5,265评论 0 36
  • 王二一辈子遇见四个女人 姓颜色的女大学生是白纱 老鲁灰头土脸披着红袄卦 X 海鹰穿着破旧的绿军装 老婆性感的牛仔裤...
    望舟阅读 833评论 1 12
  • 当我敲下这行字的时候,越女妈妈刚好拿起了第三只螃蟹。 手术刚恢复的她,侧躺在沙发上,津津有味的吃,而我坐在一旁,闻...
    越女事务所阅读 162评论 0 0
  • ——1 夜,灯火通明。空气里混合着火锅锅底传来的浓浓的牛油味。店里人声鼎沸,来来往往,络绎不绝。 陆嫣与老四坐在靠...
    熟透的梨阅读 607评论 4 10