目录
一、基本指令
二、字符串(String)
2.1 介绍
2.2 常用命令
三、列表(List)
3.1 介绍
3.2 常用命令
四、集合(Set)
4.1 介绍
4.2 常用命令
五、哈希(Hash)
5.1 介绍
5.2 常用命令
六、有序集合Zset(sorted set)
6.1 介绍
6.2 常用命令
七、Bitmaps
八、HyperLogLog
九、Geospatial
十、发布和订阅
dbsize 查看当前数据库的key的数量
flushdb 清空当前库
flushall 通杀全部库
select
keys * 查看当前库所有key (匹配:keys *1)
exists <key> 判断某个key是否存在
type <key> 查看你的key是什么类型
del <key> 删除指定的key数据
unlink <key> 根据value选择非阻塞删除.仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作。
expire <key> 为给定的key设置过期时间
ttl <key> 查看还有多少秒过期,-1表示永不过期,-2表示已过期
String是Redis最基本的类型,是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象。一个Redis中字符串value最多可以是512M。
String的数据结构为简单动态字符串(Simple Dynamic String,缩写SDS)。是可以修改的字符串,内部结构实现上类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配
内部为当前字符串实际分配的空间capacity一般要高于实际字符串长度len。当字符串长度小于1M时,扩容都是加倍现有的空间,如果超过1M,扩容时一次只会多扩1M的空间。需要注意的是字符串最大长度为512M。
set
*NX:当数据库中key不存在时,可以将key-value添加数据库
*XX:当数据库中key存在时,可以将key-value添加数据库,与NX参数互斥
*EX:key的超时秒数
*PX:key的超时毫秒数,与EX互斥
get
append
strlen
incr
decr
incrby / decrby
mset
mget
msetnx
getrange
setrange
getset
单键多值!!Redis 列表是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部(左边)或者尾部(右边)。
它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。
List的数据结构为快速链表quickList。首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是ziplist,即压缩列表。它将所有的元素紧挨着一起存储,分配的是一块连续的内存。
当数据量比较多的时候才会改成quicklist。
Redis将链表和ziplist结合起来组成了quicklist。也就是将多个ziplist使用双向指针串起来使用。这样既满足了快速的插入删除性能,又不会出现太大的空间冗余。
lpush/rpush
lpop/rpop
rpoplpush
lrange
lindex
llen
linsert
lrem
lset
Redis中set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择。
Set的数据结构是dict字典,类似于HashMap。字典是用哈希表实现的。它的内部也使用hash结构,所有的value都指向同一个内部值。
sadd
smembers
sismember
scard
srem
spop
srandmember
smove
sinter
sunion
sdiff
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。类似Java里面的Map
通过 key(用户ID) + field(属性标签) 就可以操作对应属性数据了,既不需要重复存储数据,也不会带来序列化和并发修改控制的问题
Hash类型对应的数据结构是两种:ziplist(压缩列表),hashtable(哈希表)。当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable。
hset
hget
hmset
hexists
hkeys
hvals
hincrby
hsetnx
有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。
不同之处是有序集合的每个成员都关联了一个评分(score),这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复的 。
因为元素是有序的, 所以可以根据评分(score)或者次序(position)来获取范围的元素。
zset底层使用了两个数据结构:
(1)hash,hash的作用就是关联元素value和权重score,保障元素value的唯一性,可以通过元素value找到相应的score值。
(2)跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表。
跳表简单来说对链表进行改造,在链表上建索引,即每两个结点提取一个结点到上一级,我们把抽出来的那一级叫作索引。这种链表加多级索引的结构,就是跳表。
zadd
zrange
zrangebyscore key min max [withscores] [limit offset count] 返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。
zrevrangebyscore key max min [withscores] [limit offset count] 同上,改为从大到小排列。
zincrby
zrem
zcount
zrank
Redis提供了Bitmaps这个“数据类型”可以实现对位的操作。可以把Bitmaps想象成一个以位为单位的数组, 数组的每个单元只能存储0和1, 数组的下标在Bitmaps中叫做偏移量。
示例:可以记录网站独立用户访问量、月活越度
命令:
setbit
getbit
bitcount
bitop
求集合中不重复元素个数的问题称为基数问题。HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。
但因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。
什么是基数?
比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内快速计算基数。
命令:
pfadd
pfcount
pfmerge
GEO,Geographic,地理信息的缩写。该类型就是元素的2维坐标,在地图上就是经纬度。redis基于该类型,提供了经纬度设置,查询,范围查询,距离查询,经纬度Hash等常见操作。
命令:
geoadd
geopos
geodist
georadius
Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道。
示例:
打开一个客户端订阅channel1:SUBSCRIBE channel1
打开另一个客户端,给channel1发布消息hello: publish channel1 hello
打开第一个客户端可以看到发送的消息