该栏目会系统的介绍 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 |