如下摘自:Redis 官网。python
Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.git
总的来讲,Redis 是一个基于内存的高性能的键值型数据库,也就是常说的 NoSQL, 能够用来做为数据库或者缓存。而且支持多种数据结构,包括字符串,散列,列表,集合,带有范围查询的排序集,位图,HyperLogLog,具备半径查询的地理空间索引和流。redis
各类语言都提供了 Redis 的客户端,好比 Java 的Jedis
和 python 的redis-py
.shell
同时 Redis 也提供交互式的客户端,在 mac 上执行:数据库
brew install redis
进行安装,安装完成后执行:后端
redis-cli
进入交互式的客户端,便可开始使用。缓存
本文主要用来记录针对各类数据结构的操做命令,来源主要是 Redis 官网加上本身的理解。因为英语问题,不保证理解必定正确。你们能够参考 redis 官网 来进行学习。安全
help: 这个命令很重要,只要你用的好,能够查看全部命令的用法,能够起到一个临时提示的做用,好比这个命令有哪些选项等等。使用方法:help
以后根据提示输入:help command
, 便可以查看该命令的详细方法签名。输入help @group
能够查看该 group 相关的命令,好比list
,set
.bash
keys: 使用模式匹配,返回匹配的 key, 使用*
进行查看全量的 key. 注意:不要在线上使用这个命令,不可控。keys **
服务器
exists: 查看某个 key 是否存在,存在返回 1, 不存在返回 0.exists key
.
scan: 遍历全部的 key, 由于作了分页,因此是安全的。sacn cursor match * count 100
. *
能够进行模式匹配。cursor
初次使用为 0, 以后每一次为上一次scan
返回的游标。
type: 查看某个 key 的类型,返回描述。type key
.
del: 删除 key, 能够删除多个。del key1 key2
expire: 设置过时时间,expire key seconds
.
ttl: 查看 key 的剩余生存时间,ttl key
pttl: 以毫秒形式查看 key 的过时时间,pttl key
move: 将当前数据库中的某个 key 移到新的数据库。move key db
dump: 拿到序列化后的 value. dump key
.
resotre: 用上一个命令拿到的值回复某个 key.resotre key seconds 序列化的 value
object: 查看指定 key 值的内部结构。
MONITOR: 能够监控 redis 服务器,看他处理的每一个请求。能够在 redis 客户端中执行monitor
, 也能够直接在 shell 种执行:redis-cli monitor
.
这块其实也是 public 的一部分,我单独将其写出来一下。
select: 选择数据库,默认为 16 个数据库能够选择。select index
flushdb: 删除当前 db 的全部 key. flushdb
.
swapdb: 交换两个数据库。swapdb index1 index2
.
randomkey: 在当前库里随机返回一个 key. randomkey
.
monitor: 监视器,能够监视某个 redis 接受的全部命令。redis-cli monitor
. 直接在命令行中执行。
set key value
get key
strlen key
append key value
getrange key start end
setrange key offset value
incr key
incr
的反操做,递减 1.decr key
incr
同样。incrby key one_int_value
.incrby
的反操做。递减某个量。decrby key one_int_value
nil
, 因此这条命令永远不会出错。mget key1 key2 ...
mset key1 value1 key2 value2
msetnx key1 value1 key2 value2
set + expire
. 语法set key seconds value
set if not exists
, 当 key 不存在时写入,存在时不作任何操做。setnx key value
getset key new_value
setex
类似,区别只是设置的过时时间单位为毫秒。psetex key ms value
LPUSH: 向队头放入一个元素。LPUSH key v1 v2 v3
.
RPUSH: 向队尾放入一个元素。RPUSH key v1 v2 v3
.
LPOP: 从队头弹出一个元素。LPOP key
.
RPOP: 从队尾弹出一个元素。RPOP key
.
LLEN: 获取队列的长度。LLEN key
.
LINDEX: 获取指定 index 的值。LINDEX key 0
.0,1,2 是队头的 index,-1,-2,-3 是队尾的 index.
LINSERT: 在队列中某个值的前/后插入一个新元素。LINSERT key before|after pivot value
.O(n) 的时间复杂度。
LRANGE: 返回范围内的元素,支持-1 从尾部计算。LRANGE key 0 -1
能够返回所有值。注意,时间复杂度是 O(N+S).
LREM: 删除指定数量个 value.LREM key count value
.count 大于零时从头至尾数,count<0 时从后向前数,count=0 删除全部指定的 value.
LSET: 设置指定 index 上的值。LSET key index value
. 时间复杂度为 O(n).
LTRIM: 修剪 list, 仅保留指定范围内的值。LTRIM key start end
. 事件负责度 O(n).
LPUSHX: 在队头插入一个元素,当 key 不存在时,不作操做。LPUSHX key v
.
RPUSHX: 在队尾插入一个元素,当 key 不存在时,不作操做。RPUSHX key v
.
BLPOP: 从队列头部,阻塞式的弹出一个元素,支持多个键,支持超时和永不超时。BLPOP key1 key2 3
.
BRPOP: 从队列尾部,阻塞式的弹出一个元素,支持多个键,支持超时和永不超时。BLPOP key1 key2 3
.
RPOPLPUSH: 将一个队列的最后一个元素弹出而且放到另外一个队列的头部。RPOPLPUSH source-list destination-list
.
BRPOPLPUSH: 阻塞版本的上一个命令。
SADD: 向集合中添加一个或者多个元素。SADD key v1 v2 v3
.
SCARD: 返回集合的元素数量。SCARD key
.
SPOP: 随机从集合中弹出必定数量的元素。SPOP key count
.
SMOVE: 将某个元素从一个集合移到另外一个集合。SMOVE source target member
.
SMEMBERS: 返回该集合的全部成员。SMEMBERS key
.
SISMEMBER: 给定元素是不是集合中的一员,返回 1 或者 0.SISMEMBER key v
.
SRANDMEMBER: 随机获取指定数量个成员。SRANDMEMBER count
,O(1) 或者 O(n). 看 count 咯。
SREM: 从给定集合中删除指定的多个元素。SREM key v1 v2 v3
.
SSCAN: 扫描集合。以较小的代价查找一些元素。sscan key 0 match o* count 10
. 将返回 set 中以 o 开头的 10 个元素,能够继续使用游标来扫描。
SDIFF: 返回第一个集合和其余集合不一样的元素。SDIFF key1 key2 key3
. 例如:
key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
SDIFF key1 key2 key3 = {b,d}
复制代码
O(n) 的时间复杂度,n 是全部 set 的集合总数。
SDIFFSTORE: 和上一个命令差很少,只不过会把结果存在第一个 set 中,覆盖存储。SDIFFSTORE key1 key2 key3
.O(n) 的时间复杂度。
SINTER: 求多个集合的交集,SINTER key1 key2 key3
. 时间复杂度是 O(m * n).m 是 key1 的元素数量,n 是后面全部集合的最小元素数量。
SINTERSTORE: 上一个命令的存储版本,将结果覆盖到第一个 set 中。
SUNION: 求并集。SUNION key key1 key2
.
SUNIONSTORE: 上一个命令的存储版本,将结果存储在 key 中。
ZADD: 向有序集中添加元素。支持多个(分数-值), 且支持额外的指令。ZADD [NX | XX] [CH] [INCR] score1 value1 score2 value2
. 指令也能够没有,有的话规定一些重复之类的规则。时间复杂度:对每个(分数-值)来讲都是为 O(log(n))
ZREM: 从集合中移除一个或者多个元素。ZREM key v1 v2
.O(m*log(n))
ZSCORE: 获取元素的分值。ZSCORE key v
.O(1).
ZRANK: 返回该值在集合中的排名,从低到高排序的名次。ZRANK key value
.O(log(n)).
ZREVRANK: 返回该值在集合中的排名,从高到低排序的名次。ZREVRANK key value
.O(log(n)).
ZPOPMAX: 弹出分数最高的 x 个值。ZPOPMAX key count
.O(log(N)*M).
ZPOPMIN: 弹出分数最低的 x 个值。ZPOPMIN key count
.O(log(N)*M).
BZPOPMAX: 从有续集中弹出分数最大的值。阻塞版本。BZPOPMAX key key2 key3 time
.time 为阻塞时间,一样 0 表明永不超时。O(n).
BZPOPMIN: 和上面命令同样,只不过弹出的是分数最小的值。O(n).
ZCARD: 返回有续集的元素个数。ZCARD key
.O(1) 的时间复杂度。
ZCOUNT: 返回在给定分值区间内的元素数量。ZCOUNT key min max
.O(log(n)).
ZRANGE: 返回给定分数范围内的值。ZRANGE key start end WITHSOCRES
.
ZRANGEBYLEX: 根据值的起始和截止返回范围内的值。ZRANGEBYLEX key min max [LIMIT offset count]
, 字典序版本的上一个命令。
ZRANGEBYSCORE: 根据分值的起始和截止返回范围内的值。ZRANGEBYSCORE key min max [LIMIT offset count]
,
这里是三个上面三个的反序命令,分值或者字母序列的从高到低。懒得写。
ZLEXCCOUNT: 根据值进行字典排序版本的上一个命令。ZLEXCCOUNT key min max
.O(log(n)).
ZINCRBY: 给某个元素增长给定的分值。ZINCRBY key score value
.O(log(n)).
ZSCAN: 扫描集合,和set
部分的命令差很少。
ZINTERSTORE: 求给定集合的交集并存在指定的集合中(覆盖存储), 还有一些其余的选项供操做。ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
ZUNIONSTORE: 上一个命令的并集版本。
HSET: 写入一条数据,key 对应的列的数据。HSET key field value
.
HGET: 获取某个 key 的某个列的值。HGet key field
.
HMGET: 获取多个列的值的列表。HMGET key field1 field2
.
HMSET: 一次写入多个列-值。HMSET key field1 v1 field2 v2
.
HSETX: 仅当该列不存在的时候写入。HSETX key field value
.
HDEL: 删除一个或者多个列。HDEL key field field field
HEXISTS: 检查是否包含某个列。HEXISTS key field
. 返回 0 或者 1.
HGETALL: 返回当前 key 中的全部字段和值。HGETALL key
. 时间复杂度是 O(n).
HINCRBY: 对某个列的值进行增长。HINCRBY key field number
. 只支持 feild 是 64 位有符号整数。
HINCRBYFLOAT: 增长一个浮点数。其他和上面的命令同样。HINCRBYFLOAT key field float
.
HKEYS: 返回全部的列名。HKEYS key
.
HLEN: 返回列的数据。HLEN key
.
HSCAN: 扫描全部的列-值。返回的规则和其余的 scan 同样。HSCAN key 0 match uu* count 10
HSTRLEN: 返回该列的值的长度。HSTRLEN key field
.
HVALS: 返回全部的值。只有值没有列名。HVALS key
. 时间复杂度为 O(n).
本章节的命令签名较长且变化较多,所以再也不提供示例命令和方法签名,能够去下面的连接中学习。
XINFO: 用于检索有关流和关联的消费者组的不一样信息。有三种子命令,STREAMS,GROUPS,CONSUMERS.
XADD: 将给定的条目添加到 Stream 中,若是 stream 不存在,则以 key 建立一个 Stream.
XRANGE: 从 Stream 中查找指定范围的条目并返回。
XREVRANGE: **XRANGE **的倒序版本,接受参数也是倒序。
XLEN: 返回 Stream 中的项目数量。
XDEL: 从 Stream 删除给定 ID 的项目。
XREAD: 从一个或者多个 Stream 中读取数据,仅返回 ID 大于传入 ID 的信息。
XTRIM: 将 Stream 修剪的只保留给定数量的项目,有多种修剪策略,目前只实现了一种。
XREADGROUP: 使用消费者组从 Stream 中读取信息。
XACK: 确认已经处理消息。
XCLAIM: 更改消息的全部权,能够是其余消费者来处理此消息,
XPENDING: 查看正在处理的消息的信息。
XGROUP: 建立,销毁,管理消费者组。也有多个子命令,CREATE,SETID,DESTROY,DELCONSUMER.
其实 bitmap 不是一个实际的数据结构,只是在 string 数据结构上的一组面向位的操做,由于 string 数据结构是二进制安全的,因此这个是可行的。
SETBIT: 设置某个 key 在某个位置的 bit 值。SETBIT key offset value
.
GETBIT: 获取某个 key 在某个位置的 bit 值。GETBIT key offset
.
BITCOUNT: 获取某个范围内 bit=1 的总数。BITCOUNT key start end
.
BITPOS: 获取某个范围内第一个 0 或者 1 出现的位置。BITPOS key 0 1 2
.
hyperloglog 的原理这里就不讲了,完了多看看以后单独记录一下。
PFADD: 添加一个或者多个元素。PFADD key1 v1 v2 v3
.O(1).
PFCOUNT: 返回不重复的元素的个数,能够统计多个 key. 同时,返回值是有必定 (0.81%) 错误率的近似值。PFCOUNT key1 key2 key3
.O(n).
PFMERGE: 将多个 key1 的内容合并到一个 key 中。PFMERGE target key1 key2
.O(n),n 是 key 的数量。
GEOADD: 想指定的 key 中添加一个或者多个地理位置,格式为经度,纬度,名称
.GEOADD key longitude latitude member [longitude latitude member ...]
GEOHASH: 返回一个或者多个 GEO 值的 hash.GEOHASH key member [member ...]
GEOPOS: 获取某个成员的坐标。GEOPOS key member [member ...]
GEODIST: 返回两个成员之间的距离,能够指定多种单位。GEODIST key member1 member2 [unit]
.
GEORADIUS: 返回指定点为球心,指定距离为半径内的坐标集。GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
GEORADIUSBYMEMBER: 与上一个命令类似,只是返回的是成员名称。GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
.
最后,欢迎关注个人我的公众号【 呼延十 】,会不按期更新不少后端工程师的学习笔记。 也欢迎直接公众号私信或者邮箱联系我,必定知无不言,言无不尽。
完。
以上皆为我的所思所得,若有错误欢迎评论区指正。
欢迎转载,烦请署名并保留原文连接。
联系邮箱:huyanshi2580@gmail.com
更多学习笔记见我的博客------>呼延十