Redis之入门概括与指令

Redis特点(AP模型,优先保证可用,不会管数据丢失):

快的原因:

  1. 基于内存操作,操作不需要跟磁盘交互

  2. k-v结构,类似与hashMap,所以查询速度非常快,接近O(1)。

  3. 底层数据结构是有如:跳表(节省内存,不需要节省IO操作)、SDS

  4. 通信使用lO多路复用,单个线程中通过记录跟踪每一个sock(I/O流) 的状态来 管理多个I/O流

  5. 单线程的原因是因为它执行的速度比线程切换的速度还快。

高可用:

  1. 完善的内存管理机制:过期,淘汰,持久化

  2. 主从,sentinel,cluster集群

Redis常用基础命令

  • set key value 设置值

  • get key 取值

  • flushall 清空实例下所有的数据(删库跑路)

  • flushdb 清空当前数据库

  • keys * 查看所有的key(生产环境慎用,因为是单线程的,而且不知道有多少个key,容易导致线程阻塞掉)

  • expire key 10 对key设置过期时间

  • exists key 查看key是否存在,1:在。2:不在

  • del key 删除

  • type key 查看对外的类型

Redis的数据类型(只讲常见的6种)以及使用场景

String

使用场景:

  • 过期属性:缓存,token

  • incr:计数相关的,如点赞数,评论数,分布式ID,库存。因为没有线程安全问题。

  • string的最大内存值 512M

|---------------------------|-----------------------------------------|
| 指令 | 描述 |
| SET key value | 设置键key的值为value。 |
| GET key | 获取键key的值。 |
| DEL key | 删除键key。 |
| INCR key | 将键key存储的数字值增一。 |
| DECR key | 将键key存储的数字值减一。 |
| APPEND key value | 将value追加到键key的现有值的末尾。 |
| SETNX key value | 只有在键key不存在时,将键key的值设置为value。 |
| SETEX key seconds value | 将键key的值设置为value,并将键key的过期时间设置为seconds秒。 |
| SETRANGE key offset value | 从偏移量offset开始,用value覆盖键key的值。 |
| STRLEN key | 返回键key的值的长度。 |
| GETRANGE key start end | 获取键key的字符串中,指定区间内的子串。 |
| SETXX key value | 只有在键key存在时,才设置键key的值为value。 |

Hash

使用场景:

  • 缓存对象型的数据

  • 统计型的数据

基本的指令:k k v

|-----------------------------------------------|---------------------------------------|
| 指令 | 描述 |
| HSET key field value | 为哈希表key中的字段field设置值value。 |
| HGET key field | 返回哈希表key中指定字段field的值。 |
| HDEL key field | 删除哈希表key中的一个或多个指定字段,不存在的字段将被忽略。 |
| HGETALL key | 返回哈希表key中,所有的字段和值。 |
| HKEYS key | 返回哈希表key中所有字段的名字。 |
| HVALS key | 返回哈希表key中所有字段的值。 |
| HEXISTS key field | 查看哈希表key中,指定的字段field是否存在。 |
| HINCRBY key field increment | 为哈希表key中的字段field的值加上增量increment。 |
| HINCRBYFLOAT key field increment | 为哈希表key中的字段field的值加上增量increment(浮点数)。 |
| HLEN key | 返回哈希表key中字段的数量。 |
| HMGET key field1 [field2 ...] | 返回哈希表key中,一个或多个给定字段的值。 |
| HMSET key field1 value1 [field2 value2 ...] | 同时将多个field-value (字段-值)对设置到哈希表key中。 |
| HSETNX key field value | 只有在字段field不存在时,设置哈希表字段的值。 |

List

特点&使用场景:

  • 双端队列

  • 如果键不存在,会创建新的链表

  • 所有的有序列表都能做,时间线的列表

  • 也能用来做消息队列,但是没有ack机制,一般会用更完善的消息队列如kafka

|------------------------------|-------------------------------------------------|
| 指令 | 描述 |
| LPUSH key value | 将一个或多个值插入到列表头部。如果key不存在,创建新列表并执行LPUSH操作。 |
| RPUSH key value | 将一个或多个值插入到列表尾部。如果key不存在,创建新列表并执行RPUSH操作。 |
| LPOP key | 移除并返回列表的第一个元素。 |
| RPOP key | 移除并返回列表的最后一个元素。 |
| LRANGE key start stop | 获取列表指定范围内的元素。 |
| LINDEX key index | 获取列表中指定索引的元素。 |
| LLEN key | 返回列表长度。 |
| LSET key index value | 将列表key的索引index处的值设置为value。 |
| LREM key count value | 移除列表中与参数value相等的元素。 |
| BLPOP key1 [key2] timeout | 从左侧弹出列表的第一个元素,如果列表为空则阻塞,直到等待超时或发现可弹出元素为止(不会阻塞)。 |
| BRPOP key1 [key2] timeout | 从右侧弹出列表的第一个元素,如果列表为空则阻塞,直到等待超时或发现可弹出元素为止(不会阻塞)。 |
| RPOPLPUSH source destination | 移除列表的最后一个元素,并将该元素添加到另一个列表并返 |

Set

特点&应用场景

  • 无序的集合(全部整型的时候是有序的)

  • 关注,点赞,抽奖等

|---------------------------------------|-------------------------------|
| 指令 | 描述 |
| SADD key member | 向集合添加一个或多个成员。如果成员已存在,则忽略。 |
| SMEMBERS key | 返回集合中的所有成员。 |
| SREM key member | 移除集合中一个或多个成员。 |
| SISMEMBER key member | 检查成员元素是否是集合的成员。 |
| SCARD key | 返回集合中元素的数量。 |
| SINTER key1 [key2] | 返回所有给定集合的交集。 |
| SUNION key1 [key2] | 返回所有给定集合的并集。 |
| SDIFF key1 [key2] | 返回第一个集合与其他集合之间的差集。 |
| SINTERSTORE destination key1 [key2] | 将交集存储在destination集合中。 |
| SUNIONSTORE destination key1 [key2] | 将并集存储在destination集合中。 |
| SDIFFSTORE destination key1 [key2] | 将差集存储在destination集合中。 |
| SMOVE source destination member | 将成员从source集合移动到destination集合。 |
| SRANDMEMBER key [count] | 从集合中随机返回一个或多个元素。 |
| SPOP key [count] | 从集合中随机移除并返回一个或多个元素。 |

sortset

特点&应用场景

  • 有序,不可重复。会有score字段来排序,如果score相同,根据key来简单的指令

  • 排行榜

|---------------------------------------------|-----------------------------------------|
| 指令 | 描述 |
| ZADD key score member | 将一个成员及其分数值加入到有序集当中。如果该成员已存在,则更新其分数。 |
| ZSCORE key member | 返回有序集key中,成员member的分数值。 |
| ZRANGE key start stop [WITHSCORES] | 返回有序集key中,指定区间内的成员。 |
| ZREVRANGE key start stop [WITHSCORES] | 返回有序集key中,指定区间内的成员,按分数值逆序排列。 |
| ZRANGEBYSCORE key min max [WITHSCORES] | 返回有序集key中,所有分数值介于min和max之间的成员。 |
| ZREVRANGEBYSCORE key max min [WITHSCORES] | 返回有序集key中,所有分数值介于max和min之间的成员,按分数值逆序排列。 |
| ZREM key member | 移除有序集key中的一个或多个成员。 |
| ZCARD key | 获取有序集key的成员数量。 |
| ZCOUNT key min max | 返回有序集key中,分数值在min和max之间的成员的数量。 |
| ZINCRBY key increment member | 为有序集key的成员member的分数值加上增量increment。 |
| ZRANK key member | 返回有序集key中成员member的排名。 |
| ZREVRANK key member | 返回有序集key中成员member的排名,按分数值逆序排列。 |
| ZLEXCOUNT key min max | 返回有序集key中,所有成员在指定的字典区间内的数量。 |
| ZRANGEBYLEX key min max | 返回有序集key中,所有成员在指定的字典区间内。 |
| ZREMRANGEBYRANK key start stop | 移除有序集key中,指定排名(rank)区间内的所有成员。 |
| ZREMRANGEBYSCORE key min max | 移除有序集key中,所有分数值介于min和max之间的成员。 |

BitMap

特点&应用场景

  • 位图不是实际的数据类型,而是String类型中定义的一种面向位的操作,所 以这个位图的最大长度是512M。

  • 实时的统计数据

|---------------------------------------------------------------------------------------------|------------------------------------------------|
| 指令 | 描述 |
| SETBIT key offset value | 对键key所存储的字符串值,设置或清除指定偏移量上的位(bit)。 |
| GETBIT key offset | 返回键key所存储的字符串值在指定偏移量上的位(bit)的值。 |
| BITCOUNT key [start end] | 计算字符串在指定范围内的设置位的数量。 |
| BITOP operation destkey key [key ...] | 对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destkey 上。 |
| BITPOS key bit [start] [end] | 返回位图key中第一个值为bit的位的位置。 |
| BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] | 对键key的字符串进行多个位域操作。 |