目录
以下摘自:Redis 官网。
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.
总的来说,Redis 是一个基于内存的高性能的键值型数据库,也就是常说的 NoSQL, 可以用来作为数据库或者缓存。并且支持多种数据结构,包括字符串,散列,列表,集合,带有范围查询的排序集,位图,HyperLogLog,具有半径查询的地理空间索引和流。
各种语言都提供了 Redis 的客户端,比如 Java 的Jedis
和 python 的redis-py
.
同时 Redis 也提供交互式的客户端,在 mac 上执行:
brew install redis
进行安装,安装完成后执行:
redis-cli
进入交互式的客户端,即可开始使用。
本文主要用来记录针对各种数据结构的操作命令,来源主要是 Redis 官网加上自己的理解。由于英语问题,不保证理解一定正确。大家可以参考 redis 官网 来进行学习。
help
之后根据提示输入:help command
, 即可以查看该命令的详细方法签名。输入help @group
可以查看该 group 相关的命令,比如list
,set
.*
进行查看全量的 key. 注意:不要在线上使用这个命令,不可控。keys **
exists key
. sacn cursor match * count 100
. *
可以进行模式匹配。cursor
初次使用为 0, 之后每一次为上一次scan
返回的游标。type key
.del key1 key2
expire key seconds
.ttl key
pttl key
move key db
dump key
.resotre key seconds 序列化的 value
monitor
, 也可以直接在 shell 种执行:redis-cli monitor
.这块其实也是 public 的一部分,我单独将其写出来一下。
select index
flushdb
.swapdb index1 index2
.randomkey
.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 key v1 v2 v3
.RPUSH key v1 v2 v3
.LPOP key
.RPOP key
.LLEN key
.LINDEX key 0
.0,1,2 是队头的 index,-1,-2,-3 是队尾的 index.LINSERT key before|after pivot value
.O(n) 的时间复杂度。LRANGE key 0 -1
可以返回全部值。注意,时间复杂度是 O(N+S).LREM key count value
.count 大于零时从头到尾数&#xff0c;count<0 时从后向前数&#xff0c;count&#61;0 删除所有指定的 value.LSET key index value
. 时间复杂度为 O(n).LTRIM key start end
. 事件负责度 O(n).LPUSHX key v
.RPUSHX key v
.BLPOP key1 key2 3
.BLPOP key1 key2 3
.RPOPLPUSH source-list destination-list
.SADD key v1 v2 v3
.SCARD key
.SPOP key count
.SMOVE source target member
.SMEMBERS key
.SISMEMBER key v
.SRANDMEMBER count
,O(1) 或者 O(n). 看 count 咯。SREM key v1 v2 v3
.sscan key 0 match o* count 10
. 将返回 set 中以 o 开头的 10 个元素&#xff0c;可以继续使用游标来扫描。SDIFF key1 key2 key3
. 例如&#xff1a;key1 &#61; {a,b,c,d}
key2 &#61; {c}
key3 &#61; {a,c,e}
SDIFF key1 key2 key3 &#61; {b,d}
O(n) 的时间复杂度&#xff0c;n 是所有 set 的集合总数。
SDIFFSTORE key1 key2 key3
.O(n) 的时间复杂度。SINTER key1 key2 key3
. 时间复杂度是 O(m * n).m 是 key1 的元素数量&#xff0c;n 是后面所有集合的最小元素数量。SUNION key key1 key2
.ZADD [NX | XX] [CH] [INCR] score1 value1 score2 value2
. 指令也可以没有&#xff0c;有的话规定一些重复之类的规则。时间复杂度&#xff1a;对每一个&#xff08;分数-值&#xff09;来说都是为 O(log(n))ZREM key v1 v2
.O(m*log(n))ZSCORE key v
.O(1).ZRANK key value
.O(log(n)).ZREVRANK key value
.O(log(n)).ZPOPMAX key count
.O(log(N)*M).ZPOPMIN key count
.O(log(N)*M).BZPOPMAX key key2 key3 time
.time 为阻塞时间&#xff0c;同样 0 代表永不超时。O(n).ZCARD key
.O(1) 的时间复杂度。ZCOUNT key min max
.O(log(n)).ZRANGE key start end WITHSOCRES
.ZRANGEBYLEX key min max [LIMIT offset count]
, 字典序版本的上一个命令。ZRANGEBYSCORE key min max [LIMIT offset count]
,ZLEXCCOUNT key min max
.O(log(n)).ZINCRBY key score value
.O(log(n)).set
部分的命令差不多。ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
HSET key field value
.HGet key field
.HMGET key field1 field2
.HMSET key field1 v1 field2 v2
.HSETX key field value
.HDEL key field field field
HEXISTS key field
. 返回 0 或者 1.HGETALL key
. 时间复杂度是 O(n).HINCRBY key field number
. 只支持 feild 是 64 位有符号整数。HINCRBYFLOAT key field float
.HKEYS key
.HLEN key
.HSCAN key 0 match uu* count 10
HSTRLEN key field
.HVALS key
. 时间复杂度为 O(n).本章节的命令签名较长且变化较多&#xff0c;因此不再提供示例命令和方法签名&#xff0c;可以去下面的链接中学习。
stream 相关命令
其实 bitmap 不是一个实际的数据结构&#xff0c;只是在 string 数据结构上的一组面向位的操作&#xff0c;因为 string 数据结构是二进制安全的&#xff0c;所以这个是可行的。
SETBIT key offset value
.GETBIT key offset
.BITCOUNT key start end
.BITPOS key 0 1 2
.hyperloglog 的原理这里就不讲了&#xff0c;完了多看看之后单独记录一下。
PFADD key1 v1 v2 v3
.O(1).PFCOUNT key1 key2 key3
.O(n).PFMERGE target key1 key2
.O(n),n 是 key 的数量。经度&#xff0c;纬度&#xff0c;名称
.GEOADD key longitude latitude member [longitude latitude member ...]
GEOHASH key member [member ...]
GEOPOS key member [member ...]
GEODIST key member1 member2 [unit]
.GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
.最后&#xff0c;欢迎关注我的个人公众号【 呼延十 】&#xff0c;会不定期更新很多后端工程师的学习笔记。 也欢迎直接公众号私信或者邮箱联系我&#xff0c;一定知无不言&#xff0c;言无不尽。
完。
2019-04-04 开始连载 2019-05-06 完成
以上皆为个人所思所得&#xff0c;如有错误欢迎评论区指正。
欢迎转载&#xff0c;烦请署名并保留原文链接。
联系邮箱&#xff1a;huyanshi2580&#64;gmail.com
更多学习笔记见个人博客------>呼延十