基本介绍

  1. NoSql 数据库,非关系型数据库(REmote DIctionary Server 远程字典服务器)
  2. redis 性能非常高,单机能够达到 15w qps,通常适合做缓存,也可以持久化。
  3. 免费开源,高性能的(key/value)分布式数据库,基于内存运行,并支持持久化的 NoSQL 数据库,也称为数据结构服务器

官网: https://redis.io/ http://www.redis.cn/
下载地址: https://github.com/tporadowski/redis/releases
文档: http://redisdoc.com/

Redis 优势

  • 性能极高 –- Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 –- Redis支持二进制案例的 Strings,Lists,Hashes,Sets及Ordered Sets数据类型操作。
  • 原子—Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
  • 丰富的特性 – Redis还支持publish/subscribe,通知,key过期等等特性。

    安装

    image.png
    image.png
    默认端口: 6379
    image.png
    image.png

    Redis 五大数据类型

  • String (字符串)

  • Hash(哈希)
  • List(列表)
  • Set(集合)
  • zset(sorted set 有序集合)

    Redis的基本使用:

    说明: Redis安装好后,默认有16个数据库,初始默认使用0号库,编号是0…15
    1.添加key-val [set]
    1.查看当前redis的 所有key [keys *]
    2.获取key对应的值. [get key]
    3.切换redis 数据库 [select index]
    4.如何查看当前数据库的key-val数量 [dbsize]
    5.清空当前数据库的key-val和清空所有数据库的key-val [fushdb flushal]
    fushdb: 清空当前库的数据
    flushal: 清空所有库的数据
    image.png
    set key value
    get key
    del key
    dbsize
    setex (set with expire) 键秒值
    set key second value
    1. 127.0.0.1:6379> setex name 10 xiao
    2. OK
    3. 127.0.0.1:6379> get name
    4. "xiao"
    5. 127.0.0.1:6379> get name
    6. (nil)
    7. 127.0.0.1:6379>
    mset 同时设置一个或多个 key-value 对(如果某个给定的 key 已经存在,新值会覆盖原来的就值)
    mset key value [key value]
    mget key [key] 同时获取多个值
    image.png

    Hash (哈希,类似于golang里面的map),键值对集合。

    hset/hget/hmset/hmget/hgetall/hdel/hexists
    是一个 string 类型 field 和 value 的映射表,适合存储对象。存储到redis之后,取出来都是对象。
    var user1 map[string]string
    1. 127.0.0.1:6379> hset user name xiao
    2. (integer) 1
    3. 127.0.0.1:6379> hset user age 12
    4. (integer) 1
    5. 127.0.0.1:6379> hget user name
    6. "xiao"
    7. 127.0.0.1:6379> hget user age
    8. "12"
    9. 127.0.0.1:6379> hgetall user
    10. 1) "name"
    11. 2) "xiao"
    12. 3) "age"
    13. 4) "12"
    hmset 同时存储多个键值对
    1. 127.0.0.1:6379> hmset book name js page 200 auther xixi
    2. OK
    3. 127.0.0.1:6379> hmget book name page auther
    4. 1) "js"
    5. 2) "200"
    6. 3) "xixi"
    7. 127.0.0.1:6379> hmget book name page
    8. 1) "js"
    9. 2) "200"
    10. 127.0.0.1:6379> hlen book
    11. (integer) 3
    12. 127.0.0.1:6379> hexists book age
    13. (integer) 0
    14. 127.0.0.1:6379> hexists book name
    15. (integer) 1
    16. 127.0.0.1:6379> hdel book name
    17. (integer) 1
    18. 127.0.0.1:6379> hget book
    19. (error) ERR wrong number of arguments for 'hget' command
    20. 127.0.0.1:6379> hgetall book
    21. 1) "page"
    22. 2) "200"
    23. 3) "auther"
    24. 4) "xixi"
    25. 127.0.0.1:6379>
    hlen key 查看 hash key 里面有多少个字段
    hexists key field 查看hash里某个键是否存在某个属性字段

    List本质是个链表

    元素有序、可重复
    lpush/rpush/lrange/lpop/rpop/del
    注存取顺序
    如果值全部移除,那么对应的键也就消失了
    lindex
    llen key
  1. // 左边插入
  2. lpush key value [value...]
  3. lrange key start stop
  4. lrange key 0 -1 // 全部取出, 0 表示第一个, -1 表示倒数第一个, [start, stop]
  5. // 右边插入
  6. rpush key value [value...]
  7. rrange key start stop
  1. 127.0.0.1:6379> lpush herolist aaa bbb ccc
  2. (integer) 3
  3. 127.0.0.1:6379> lrange herolist 0 -1
  4. 1) "ccc"
  5. 2) "bbb"
  6. 3) "aaa"
  7. 127.0.0.1:6379> rpush herolist 111 222 333
  8. (integer) 6
  9. 127.0.0.1:6379> lrange herolist 0 -1
  10. 1) "ccc"
  11. 2) "bbb"
  12. 3) "aaa"
  13. 4) "111"
  14. 5) "222"
  15. 6) "333"
  16. 127.0.0.1:6379>lpop herolist
  17. "ccc"
  18. 127.0.0.1:6379> lrange herolist 0 -1
  19. 1) "bbb"
  20. 2) "aaa"
  21. 3) "111"
  22. 4) "222"
  23. 5) "333"
  24. 127.0.0.1:6379> rpop herolist
  25. "333"
  26. 127.0.0.1:6379> rpop herolist
  27. "222"
  28. 127.0.0.1:6379> lrange herolist 0 -1
  29. 1) "bbb"
  30. 2) "aaa"
  31. 3) "111"
  32. 127.0.0.1:6379> del herolist
  33. (integer) 1
  34. 127.0.0.1:6379> lrange herolist 0 -1
  35. (empty list or set)
  36. 127.0.0.1:6379>

Set 集合

set 是string 类型的无序集合,底层是 Hash Table 数据结构。
字符串元素是无序的,而且不能重复

  1. sadd key member [member...] // 创建 添加 元素
  2. smembers key // 查看所有的元素
  3. sismember key member // 判断是否存在某个元素
  4. srem key member [member...] // 删除元素
  1. 127.0.0.1:6379> smembers email
  2. 1) "haha@163.com"
  3. 2) "xixi@qq.com"
  4. 3) "xiao@126.com"
  5. 4) "11@abc.com"
  6. 5) "22@qq.com"
  7. 127.0.0.1:6379> sadd email aa@qq.com
  8. (integer) 1
  9. 127.0.0.1:6379> smembers email
  10. 1) "11@abc.com"
  11. 2) "xixi@qq.com"
  12. 3) "haha@163.com"
  13. 4) "22@qq.com"
  14. 5) "aa@qq.com"
  15. 6) "xiao@126.com"
  16. 127.0.0.1:6379> sismember email 11@qq.com
  17. (integer) 0
  18. 127.0.0.1:6379> sismember email 11@abc.com
  19. (integer) 1
  20. 127.0.0.1:6379> srem email 11@abc.com
  21. (integer) 1
  22. 127.0.0.1:6379> smembers email
  23. 1) "xixi@qq.com"
  24. 2) "haha@163.com"
  25. 3) "22@qq.com"
  26. 4) "aa@qq.com"
  27. 5) "xiao@126.com"
  28. 127.0.0.1:6379>