Redis

1.Redis

1.NoSQL

  • SQL:关系型数据库
    • 结构化
      • 键值类型:Redis
      • 文档类型:MongoDB
      • 列类型:HBase
      • Graph类型:Neo4j
    • 关联的
    • SQL查询
    • ACID:原子性,隔离性,持久性,一致性
    • 磁盘存储
    • 垂直扩展
    • 使用场景:
      • 数据结构固定
      • 对数据安全,一致性要求较高
  • NoSQL:非关系型数据库
    • 非结构化
    • 无关联的
    • 非SQL
    • BASE:无法全部满足ACID
    • 内存存储
    • 水平扩展
    • 使用场景:
      • 数据结构不固定
      • 对一致性,安全性要求不高
      • 对性能要求高

2.Redis

  • Remot Dictionary Server
  • 远程词典服务器
  • 基于内存的键值型NoSQL数据库
  • 特征:
    • 键值型,value支持多种不同数据结构,功能丰富
    • 单线程,每个命令具备原子性
    • 低延迟,速度快(基于内存,IO多路复用,良好的编码)
    • 支持数据持久化
    • 支持主从集群,分片集群
    • 支持多语言客户端

3.Redis命令行客户端

1
redis-cli [options][commonds]
  • options:
    • -h:指定连接的redis的节点的ip地址,默认127.0.0.1
    • -p:指定连接的redis节点的端口,默认6379
    • -a:指定访问的密码
  • commonds:
    • ping:与redis服务器做心跳测试,服务端正常会返回pong

2.Redis命令

1.Redis数据结构

  • key-value数据库
    • key一般是String类型
    • value有多种类型

2.通用命令

  • KEYS:查看符号模板的所有key
    • 即查找,*表示多个字符,?表示单个字符
    • 因为单线程,所以太多的时候容易阻塞
  • DEL:删除指定的key
    • 返回值是删除key的个数
  • EXISTS:判断key是否存在
    • 返回01
  • EXPIRE:给key设置有效期,有效期到期该key会被自动删除
  • TTL:查看key的剩余有效期

3.String类型

  • 字符串类型

    • string:普通字符串
    • int:整数类型,可以做自增自减操作
    • float:浮点类型,可以做自增自减操作
  • 底层都是字节数组形式存储

  • 最大空间不超过512m

  • 常见命令:

    • SET:添加或者修改一个已经存在的String类型的键值对
    • GET:根据key获取String类型的value
    • MSET:批量添加多个String类型的键值对
    • MGET:根据多个key获取多个String类型的value
    • INCR:让一个整型的key自增1
    • INCRBY:让一个整型的key自增并指定步长
    • INCRBYFLOAT:让一个浮点数类型的数字自增并指定步长
    • SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行
      • 和SET 键值对 NX的效果一样
    • SETEX:添加一个String类型的键值对,并且指定有效期
      • 和SET 键值对 EX的效果一样

4.Key的层级格式

  • key可以有多个单词形成层级结构,多个单词之间用:隔开
    • 一般是项目名:业务名:类型:id
  • 如果value是一个java对象,可以将对象序列化为json字符串后存储

5.Hash类型

  • 与Java中的HashMap类似

  • 散列,其value是一个无序字典

  • Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD

  • 常见命令:

    • HSET key field value:添加或者修改一个Hash类型的key的field的值
    • HGET key field:获取一个Hash类型key的field的值
    • HMSET:批量添加多个Hash类型key的field的值
    • HMGET:批量获取多个Hash类型key的field的值
    • HGETALL:获取一个Hash类型的key中的所有field和value
    • HKEYS:获取一个Hash类型的key中的所有field
    • HVALS:获取一个Hash类型的key中的所有value
    • INCRBY:让一个Hash类型key的字段值自增并指定步长
    • HSETNX:添加一个Hash类型的key的field值,前提是这个field不存在,否则不执行

6.List类型

  • 双向链表结构,既可以支持正向检索也可以支持反向检索
  • 特征:
    • 有序
    • 元素可以重复
    • 插入和删除速度快
    • 查询速度一般
  • 常见命令:
    • LPUSH key element ……:向列表左侧插入一个或多个元素
    • LPOP key:移除并返回列表左侧的第一个元素,没有则返回null
    • RPUSH key element ……:向列表右侧插入一个或多个元素
    • RPOP key:移除并返回列表右侧的第一个元素
    • LRANGE key start end:返回一段角标范围内的所有元素
    • BLPOP和BRPOP:与LPOP和RPOP类似,在没有元素时等待指定时间,而不是直接返回null

7.Set类型

  • 与Java中的HashSet类似,可以看作是一个value为null的HashMap
  • 特征:
    • 无序
    • 元素不可重复
    • 查找快
    • 支持交集,并集,差集等功能
  • 常见命令:
    • SADD key member ……:向set中添加一个或多个元素
    • SREM key member ……:移除set中的指定元素
    • SCARD key:返回set中元素的个数
    • SISMEMBER key member:判断一个元素是否存在于set中
    • SMEMBERS:获取set中的所有元素
    • SINTER key1 key2 ……:求key1与key2的交集
    • SDIFF key1 key2 ……:求key1与key2的差集
    • SUNION key1 key2 ……:求key1与key2的并集,重复元素只记录一次

8.SortedSet类型

  • 可排序的set集合,与Java中的TreeSet类似,但底层数据结构不同
  • SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序
  • 底层的实现是一个跳表加hash表
  • 特性:
    • 可排序
    • 元素不重复
    • 查询速度快
  • 适用于排行榜
  • 常见命令:
    • ZADD key score member:向sortedset中添加一个或多个元素,如果已经存在则更新score值
    • ZREM key member:删除sortedset中的指定元素
    • ZSCORE key member:获取sortedset中指定元素的score值
    • ZRANK key member:获取sortedset中指定元素的排名
    • ZCARD key:返回sortedset中元素的个数
    • ZCOUNT key min max:统计score值在给定范围内的所有元素的个数
    • ZINCRBY key increment member:让sortedset中的指定元素自增,步长为指定的increment值
    • ZRANGE key min max:按照score排序后,获取指定排名范围内的元素
    • ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素
    • ZINTER ZDIFF ZUNION:求交集,差集,并集
  • 所有排序默认升序,降序在Z后面加REV