• 【原】Redis入门教程


    最近在学习Redis,写几篇文章记录一下学习过程:Redis入门教程。

    1.Redis基本概念

    2.Redis环境搭建

    • 单机

    • 集群

    3.实战-Java如何使用Redis

    4.Redis学习资料推荐

    5.Redis高级篇


    1.Redis基本概念

    Redis

    • Redis是一种开源的基于内存存储的数据结构(c编写),常用作数据库、缓存、消息代理。
    • 支持的数据类型包括Strings、Lists、Sets、Sorted sets、Hashes、Bit arrays、HyperLogLogs和基于半径查询的地理空间索引。
    • Redis已集成replication、Lua scripting、LRU eviction、transactions和不同等级的磁盘持久化策略,并且通过Redis Sentinel和集群的自动分区保障了高可用性。
      详细请看下面的文章:

    Redis Keys

    Redis的key是二进制安全的,所谓二进制安全是PHP语言中的一个术语,是指处理文本的字节流,不会考虑文本中的特殊符号等,所以,key可以是一个字符串,也可以是一张JPG图片,也可以是一个空字符串。
    关于Redis的key的一些规范

    • key的长度不要太长。key允许的最大长度是512MB。原因有二:1)浪费空间2)key之间进行比较开销较大。
    • key的长度不要太短。适当增加key的长度使得提高可读性。
    • key使用统一的规范。例如“object-type:id”。

    Redis 基本数据类型

    数据类型大小不能超过512MB

    Strings

    String是Redis中最简单的值类型,可以用来缓存HTML片段或页面等信息。
    基本操作如下:

    添加、查询

    SET 给单个key赋值

    > set mykey somevalue
    OK
     
    > set mykey newval nx
    (nil)
    > set mykey newval xx
    OK
    

    GET 根据单个key获取value

    > get mykey
    "somevalue"
    

    INCR/INCRBY/DECR/DECRBY 增减操作,都是先将String转换成Integer类型然后进行增减操作

    > set counter 100
    OK
    > incr counter
    (integer) 101
    > incr counter
    (integer) 102
    > incrby counter 50
    (integer) 152
    

    MSET 给多个key赋值

    > mset a 10 b 20 c 30
    OK
    

    MGET 根据多个key得到对应value,用空格分开key即可

    > mget a b c
    1) "10"
    2) "20"
    3) "30"
    

    删除、修改

    EXISTS、DELETE

    > set mykey hello
    OK
    > exists mykey
    (integer) 1
    > del mykey
    (integer) 1
    > exists mykey
    (integer) 0
    

    判断类型

    > set mykey x
    OK
    > type mykey
    string
    > del mykey
    (integer) 1
    > type mykey
    none
    

    指定生存周期

    > set key some-value
    OK
    > expire key 5
    (integer) 1
    > get key (immediately)
    "some-value"
    > get key (after some time)
    (nil)
    

    Lists

    Redis中的Lists是链表实现的,所以适合添加和删除,不适合随机访问。

    添加、查询

    RPUSH、LPUSH、LRANGE(L表左、R表右)
    添加查询单个值 larnge index1,index2 表示开始索引、结束索引,可以为负值

    > rpush mylist A
    (integer) 1
    > rpush mylist B
    (integer) 2
    > lpush mylist first
    (integer) 3
    > lrange mylist 0 -1
    1) "first"
    2) "A"
    3) "B"
    

    添加查询多个值

    > rpush mylist 1 2 3 4 5 "foo bar"
    (integer) 9
    > lrange mylist 0 -1
    1) "first"
    2) "A"
    3) "B"
    4) "1"
    5) "2"
    6) "3"
    7) "4"
    8) "5"
    9) "foo bar"
    

    删除 pop功能 当list中元素都出队后,list就删除了或用del 命令

    > rpush mylist a b c
    (integer) 3
    > rpop mylist
    "c"
    > rpop mylist
    "b"
    > rpop mylist
    
    "a"
    

    LTRIM 类似于LRANGE,但不同的是不在该范围内的元素会被删除

    > rpush mylist 1 2 3 4 5
    (integer) 5
    > ltrim mylist 0 2
    OK
    > lrange mylist 0 -1
    1) "1"
    2) "2"
    3) "3"
    

    BRPOP和BLPOP是RPOP和LRPOP阻塞的版本

    > brpop tasks 5
    1) "tasks"
    2) "do_something"
    

    Sets

    添加元素

    > sadd myset 1 2 3
    (integer) 3
    > smembers myset
    1. 3
    2. 1
    3. 2
    

    sismember是否存在元素

    > sismember myset 3
    (integer) 1
    > sismember myset 30
    (integer) 0
    

    sets适合于表述对象间的关系,例如,用来实现标签tags.
    添加

    > sadd news:1000:tags 1 2 5 77
    (integer) 4
    
    > sadd tag:1:news 1000
    (integer) 1
    > sadd tag:2:news 1000
    (integer) 1
    > sadd tag:5:news 1000
    (integer) 1
    > sadd tag:77:news 1000
    (integer) 1
    

    遍历

    smembers news:1000:tags
    1. 5
    2. 1
    3. 77
    4. 2
    Sorted sets
    

    添加元素

    > zadd hackers 1940 "Alan Kay"
    (integer) 1
    > zadd hackers 1957 "Sophie Wilson"
    (integer) 1
    > zadd hackers 1953 "Richard Stallman"
    (integer) 1
    > zadd hackers 1949 "Anita Borg"
    (integer) 1
    > zadd hackers 1965 "Yukihiro Matsumoto"
    (integer) 1
    > zadd hackers 1914 "Hedy Lamarr"
    (integer) 1
    > zadd hackers 1916 "Claude Shannon"
    (integer) 1
    > zadd hackers 1969 "Linus Torvalds"
    (integer) 1
    > zadd hackers 1912 "Alan Turing"
    (integer) 1
     
    > zrange hackers 0 -1
    1) "Alan Turing"
    2) "Hedy Lamarr"
    3) "Claude Shannon"
    4) "Alan Kay"
    5) "Anita Borg"
    6) "Richard Stallman"
    7) "Sophie Wilson"
    8) "Yukihiro Matsumoto"
    9) "Linus Torvalds"
    

    逆序

    > zrevrange hackers 0 -1
    1) "Linus Torvalds"
    2) "Yukihiro Matsumoto"
    3) "Sophie Wilson"
    4) "Richard Stallman"
    5) "Anita Borg"
    6) "Alan Kay"
    7) "Claude Shannon"
    8) "Hedy Lamarr"
    9) "Alan Turing"
    

    带具体值并返回

    > zrange hackers 0 -1 withscores
    1) "Alan Turing"
    2) "1912"
    3) "Hedy Lamarr"
    4) "1914"
    5) "Claude Shannon"
    6) "1916"
    7) "Alan Kay"
    8) "1940"
    9) "Anita Borg"
    10) "1949"
    11) "Richard Stallman"
    12) "1953"
    13) "Sophie Wilson"
    14) "1957"
    15) "Yukihiro Matsumoto"
    16) "1965"
    17) "Linus Torvalds"
    18) "1969"
    

    范围操作

    > zrangebyscore hackers -inf 1950
    1) "Alan Turing"
    2) "Hedy Lamarr"
    3) "Claude Shannon"
    4) "Alan Kay"
    5) "Anita Borg"
     
    > zremrangebyscore hackers 1940 1960
    (integer) 4
    

    Hashes

    > hmset user:1000 username antirez birthyear 1977 verified 1
    OK
    > hget user:1000 username
    "antirez"
    > hget user:1000 birthyear
    "1977"
    > hgetall user:1000
    1) "username"
    2) "antirez"
    3) "birthyear"
    4) "1977"
    5) "verified"
    6) "1"
    
    > hmget user:1000 username birthyear no-such-field
    1) "antirez"
    2) "1977"
    3) (nil)
     
    > hincrby user:1000 birthyear 10
    (integer) 1987
    > hincrby user:1000 birthyear 10
    (integer) 1997
    

    Bit arrays

    该类型最大好处是节省空间
    setbit 第一个参数是第几位,第二个参数是对应的value

    > setbit key 10 1
    (integer) 1
    > getbit key 10
    (integer) 1
    > getbit key 11
    (integer) 0
     
    > setbit key 0 1
    (integer) 0
    > setbit key 100 1
    (integer) 0
    > bitcount key
    (integer) 2
    
    

    HyperLogLogs

    HyperLogLogs是一种基于概率的数据结构,用于统计元素的唯一性(专业来将,是评估set集合的势)。该数据结构的好处是用特定的算法能很快地统计set集合中的元素个数,不会重复计算,其功能和Set集合类似。

    > pfadd hll a b c d
    (integer) 1
    > pfcount hll
    (integer) 4
    
  • 相关阅读:
    在 Queue 中 poll()和 remove()有什么区别?
    jdk 8 HashMap源码解读
    java 中,没有任何方法和成员变量的接口
    ArrayList、LinkedList、Vector、Array
    StringBuilder和StringBuffer
    Collection
    jdk代理和cglib代理源代码之我见
    多 线程
    Spring的@Enable*注解的工作原理
    redis 学习
  • 原文地址:https://www.cnblogs.com/yourarebest/p/5987390.html
Copyright © 2020-2023  润新知