1、简介
Redis是一个开源、内存中的数据结构存储系统,他可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,内置 复制、LUA脚本、LRU驱动事件、事务和不同级别磁盘持久化,可通哨兵(Sentinel)和自动分区(Cluster)提高可用性。
2、数据类型
Redis本身就是一个Map,其中所有的数据都是采用key:value
的形式存储。所有的key都是采用String类型(表名:id:idvalue:业务),value的部分的类型就是我们常说的Redis 5中数据类型。
2.1、字符串(String)
字符串是一种最基本的Redis值类型。字符串是二进制安全的,意味着一个Redis字符串能够包含任意类型的数据。
-
基本命令
- set key value:添加/修改数据
- get key:获取数据
- del key:删除数据
- mset key1 value1 key2 value2 ······:添加/修改多个数据
- mget key1 key2······:获取多个数据
- strlen:获取数据字符串长度
- append:追加信到原始信息后面(存在原始信息就追加,没有就新建)
-
拓展操作:
-
数值增加指定范围的值(可用于生成数据库ID,为数据库表主键提供生成策略)
- incr key:增加1
- incrby key increment:增加给定的值
- incrbyfloat key increment:增加单精度值
-
数值减少指定范围的值
- decr key:减少1
- decrby key increment:减少给定的值
-
自动到期时间(可用于记录一些时间限制的操作)
- setex key seconds value/ psetex key millisenconds value
-
2.2、哈希(Hash)
Hashes是字符串字段和字符串值之间的映射,由field和关联的value组成的map,field和value都是字符串的。
- 基本命令
- hset key field value:添加/修改数据
- hget key field:获取key的field的值
- hgetall key:获取key下所有的field及值
- hdel key field1 field2··· :删除数据
- hmset key field1 value1 field2 value2 :添加/修改多个数据
- hget key field1 field2:获取key的多个field的值
- hlen key:获取key下的field数量
- hexists key field:判断key下的field是否存在
- hkeys key:获取key下所有field
- hvals key:获取key下所有value
- hincrby key field increment:增加指定field的值(整数)
- hincrbyfloat key field increment:增加指定field的值(单精度)
2.3、列表(List)
Redis列表是有顺序、可重复的字符串列表。是一个双向链表,可以添加一个元素到列表的头部(左边)或者尾部(右边),同时也可从头部(左边)或者尾部(右边)获取数据。
- 基本命令
- lpush key value1 value2:从左边添加数据
- rpush key value1 value2:从右边添加数据
- lrange key startIndex stopIndex:获取数据(不移除)
- lindex key index:获取index位置的值(不移除)
- llen key:获取长度
- lpop key:左边获取数据并移除
- rpop key:右边获取数据并移除
- blpop key timeout:阻塞左边获取数据并移除(指定的时间内未获取到数据则返回nil)
- brpop key timeout:阻塞右边获取数据并移除(指定的时间内未获取到数据则返回nil)
- lrem key count value:移除制定数据(count:移除多少个,value:移除的元素)
2.4、集合(Set)
Redis集合是一个无序的、不可重复的字符串合集。你可以以O(1) 的时间复杂度(无论集合中有多少元素时间复杂度都为常量)完成 添加,删除以及测试元素是否存在的操作,以及合并、求交等操作。
-
基本命令
- sadd key member1 member2:添加数据
- smembers key:获取key下全部数据
- srem key member1 member2:删除数据
- scard key:获取集合数据总量
- sismember key member:判断集合中是否包含指定数据
- srandmember key count:随机获取集合中指定数量的数据
- spop key:随机获取集合中的某个数据并将该数据移除
-
拓展命令
- sinter key1 key2:计算两个集合的交集
- sunion key1 key2:计算两个集合的并集
- sdiff key1 key2:计算两个集合的差集(key1的value减去key2的value)
- sinterstore destination key1 key2:将两个集合的交集存到新集合(destination )中
- sunionstore destination key1 key2:将两个集合的并集存到新集合(destination )中
- sdiffstore destination key1 key2:将两个集合的差集存到新集合(destination )中
- smove source destination member:将指定的数据从原始集合中移动到目标集合中
2.5、有序集合(Sorted set)
有序集合和集合类似,也是一个无序的、不可重复的字符串合集。但是每个字符串元素都关联到一个叫score浮动数值,里面的元素总是通过score进行着排序,所以不同的是,它是可以检索的一系列元素。
- 基本命令
- zadd key score1 member1 score2 menber2:添加数据
- zrange key start stop [withscores]:获取指定范围的数据
- zrevrange key start stop [withscores]:获取指定范围的数据(反向)
- zrem key member:删除数据
- zrank key member:获取数据对应的索引
- zrevrank key member:获取数据反向排序对应的索引
- zscore key member:获取某个元素的score值
- zincrby key increment menber:修改某个元素的score值
- zrangebyscore key min max [withscores] [limit]:按score范围获取数据
- zrevrangebyscore key min max [withscores]:按score范围获取数据(反向)
- zremrangebyrank key start stop:按索引删除
- zremrangebyscope key min max:按score删除
- zcard key:获取集合数据总量
- zcount key min max:按score 的范围获取集合数据总量
- zinterstore destination numkeys key1 key2:交集(numkeys:集合数,后面需要指定相应数目的集合名)
- zunionstore destination numkeys key1 key2:并集(numkeys:集合数,后面需要指定相应数目的集合名)
2.6、位数组(Bit arrays)
或者说 simply bitmaps,通过特殊的命令,你可以将 String 值当作一系列 bits 处理:可以设置和清除单独的 bits,数出所有设为 1 的 bits 的数量,找到最前的被设为 1 或 0 的 bit等。
2.7、HyperLogLogs
HyperLogLog 是用来做基数统计的算法。