该栏目会系统的介绍 Redis 的知识体系,共分为相关概念、操作指令、主从复制等模块
常见命令
1、键相关命令
| 功能 | 指令 |
|---|
| 查看当前库所有key | keys * |
| 判断某个key是否存在 | exists key |
| 设置key的过期时间 | expire key seconds |
| 查看key的过期时间 | ttl key |
| 删除指定的key数据 | del key |
| 修改键名 | rename key newKey |
| 查看key是什么类型 | type key |
2、库相关命令
| 功能 | 指令 |
|---|
| 切换到dbNo数据库 | select dbNo |
| 查看当前数据库key数量 | dbsize |
| 清空当前数据库数据 | flushdb |
| 清空全部数据库数据 | flushall |
字符串(String)
1、简介
概述:key-value形式的二进制安全的类型。意味着String可以存储任何数据,比如jpg图片或者序列化对象。一个字符串值最多可以是512M数据结构:简单动态字符串,采用预分配冗余空间的方式来减少内存的频繁分配
2、相关命令
| 功能 | 命令 |
|---|
| 添加键值 | set key value |
| 添加键值,key不存在才能添加成功 | setnx key value |
| 添加键值,并设置过期时间 | setex key second value |
| 设置多个键值 | mset key1 value1… |
| 追加值到原值 | append key value |
| 将数字值增1 | incr key |
| 将数字值增加step | incrby key step |
| 将数字值减1 | decr key |
| 将数字值减step | decrby key step |
| 获取值 | get key |
| 获取多个值 | mget key1… |
| 设置新值并获取旧值 | getset key value |
| 获取值的长度 | strlen key |
列表(List)
1、简介
概述:List是单键多值的双向链表数据结构:List的数据结构是由压缩链表或快速链表。列表元素比较少的情况下只会使用压缩列表,当数据量比较多的时候才会改成快速链表
2、相关命令
| 功能 | 命令 |
|---|
| 从左边插入一个或多个值 | lpush key value |
| 从右边插入一个或多个值 | rpush key value |
| 在value之前或之后插入newValue | linsert key before | after value newValue |
| 从左边弹出值 | lpop key |
| 从右边弹出值 | rpop key |
| 从左边删除n个value | lrem key n value |
| 将下标index的值修改为value | lset key index value |
| 从key1列表右边弹出一个值,插到key2列表左边 | rpoplpush key1 key2 |
| 根据索引范围获取元素 | lrange key start end |
| 根据索引获取元素 | lindex key index |
| 获取列表长度 | llen key |
集合(Set)
1、简介
概述:Set是无序集合,其底层是一个value为null的hash表
2、相关命令
| 功能 | 命令 |
|---|
| 将一个或多个元素加入到集合 | sadd key value |
| 删除集合中某个元素 | srem key value |
| 随机从该集合中弹出一个集 | spop key |
| 把value值从一个集合移动另一个集合 | smove source dest value |
| 取出该集合所有元素 | smembers key |
| 随机从该集合中取出n个值 | srandmember key n |
| 返回该集合的元素个数 | scard key |
| 判断集合是否存在该value | sismember key value |
| 求两个集合的交集 | sinter key1 key2 |
| 求两个集合的并集 | sunion key1 key2 |
| 求两个集合的差集 | sdiff key1 key2 |
哈希表(Hash)
1、简介
概述:是一个键对应一个映射表(filed和value)的结构类型

数据结构:当元素个数比较少时,使用压缩列表,否则使用哈希表
2、相关命令
| 功能 | 命令 |
|---|
| 给该哈希表赋值 | hset key field value |
| 给该哈希表赋值,只有不存在才能赋值成功 | hsetnx key field value |
| 给该哈希表赋值多个键值 | hmset key field value… |
| 为该哈希表的field的值增量increment | hincrby key field increment |
| 获取哈希表中的field值 | hget key field |
| 获取哈希表中多个值 | hget key field… |
| 获取哈希表中所有field | hkeys key |
| 获取哈希表中所有value | hvals key |
| 判断哈希表中该field是否存在 | hexists key field |
有序集合(ZSet)
1、简介
概述:不重复元素的有序集合。每个成员关联一个评分,该评分可以用来排序集合。数据结构:ZSet底层有两个数据结构,Hash的作用是用来关联元素value和评分,保障元素value的唯一性。跳跃表的作用是用于给元素value排序,根据score的范围获取元素
2、相关命令
| 功能 | 命令 |
|---|
| 添加元素 | zadd key score member |
| 为集合的score加上增量 | zincrby key increment member |
| 删除该集合下指定元素 | zrem key member |
| 根据key获取元素的score | zcore key member |
| 获取索引范围内的元素 | zrange key start end [withscores] |
| 获取分数区间内的元素 | zrangebyscore key min max [withscores] |
| 倒序获取分数区间内的元素 | zrevrangebyscore key max min [withscores] |
| 分数区间内的元素个数 | zcount key min max |
| 返回该元素在集合中的排名 | zrank key member |
HyperLogLog
1、简介
概述: HyperLogLog键只需要花费12KB内存,就可以计算接近 2^64 个不同元素的基数。但是不会储存输入元素本身
2、相关命令
| 功能 | 命令 |
|---|
| 添加指定元素 | pfadd key element |
| 计算基数 | pfcount key |
| 将一个或多个HLL合并的结果存储到另一个HLL | pfmerge destkey skey1 skey2 |
3、案例
pfadd language1 redis
pfadd language1 java
pfadd language1 redis
pfcount language1
pfadd language2 redis
pfadd language2 mongodb
pfcount language1 language2
pfmerge language3 language1 language2
Geospatial
1、简介
2、相关命令
| 功能 | 命令 |
|---|
| 存储经纬度 | geoadd key lng lat |
| 获取指定地区的经纬度 | geopos key member |
| 获取两个位置之间的直线距离 | geodist key m1 m2 |
| 以给定的经纬度为中心找出radius半径内的元素 | georadius key lng lat radius m |
3、案例
geoadd china:city 121.47 31.23 shanghai
geoadd china:city 114.05 22.52 shenzhen 116.38 39.90 beijing
geopos china:city beijing
geodist china:city beijing shenzhen km
georadius china:city 110 30 10000 km
发布和订阅
1、简介
概述:Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息
2、相关命令
| 功能 | 命令 |
|---|
| 订阅通道 | subscribe channel |
| 发布消息 | publish channel message |