Redis Day
图源尚硅谷
基础操作
key 操作
Redis中数据都是基于Key-Value的形式进行存储的。
unlink 和 del 的区别是,unlink 在执行后会先反馈删除成功,但真正的删除在后续的异步操作中。( 非阻塞删除)
## expire
expire keyname lifetime
当使用 expire指定 key 的过期时间后,一旦到达时间,key 就会被删除。
dbsize
查看当前库中有多少 key
常用类型
Redis - String
基础操作
set
get
append
strlen
setnx
incr
decr
incr / decry by
增加、减小操作是原子操作。
原子操作
在单线程中,能够在一条指令中完成的操作视为原子操作,因为终端发生在指令间;
在多线程中,不能被其他线程打断的操作就是原子操作。
mset
mget
以上两个操作都具有原子性
getrange
setrange
setex
数据结构
以下内容是指 value。
Redis - List
单键多值。一个 key 对应很多个 value,value 以 List 的形式存储。
底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。
基础操作
lpush / rpush
lpop/rpop
rpoplpush
lrange
lindex
llen
linsert
lrem
lset
数据结构
List的数据结构为快速链表。
首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是ziplist,也就是压缩列表。
它将所有的元素紧挨着一起存储,分配的是一块连续的内存。
当数据量比较多的时候才会改成quicklist。
因为普通的链表需要的附加指针空间太大,会比较浪费空间。比如这个列表里存的只是int类型的数据,结构上还需要两个额外的指针prev和next。
![img](file:///C:\Users\klaus\AppData\Local\Temp\ksohtml3152\wps1.jpg)
Redis将链表和ziplist结合起来组成了quicklist。也就是将多个ziplist使用双向指针串起来使用。这样既满足了快速的插入删除性能,又不会出现太大的空间冗余。
整体上是链表,但局部上物理连续
Redis - Set
与 List 类似,但 Set 不允许重复元素,并且 Set 是 无序的。
Redis 的 Set 是 String 类型的无序集合。它底层其实是一个Value为Null的哈希表,所以添加,删除,查找的复杂度都是O(1)。
基础操作
sadd
smembers
sismember
scard
srem
spop
srandmember
smove
sinter
sunion
sdiff
数据结构
Set数据结构是哈希表实现的。
Java中HashSet的内部实现使用的是HashMap,只不过所有的value都指向同一个对象。Redis的Set结构也是一样,它的内部也使用哈希结构,所有的Value都指向同一个内部值。??
Redis - Hash
就像是Map<String, Map<String, String>>
基础操作
hset
hget
hmset
hexists
hkeys
hvals
hincrby
hsetnx
数据结构
Hash类型对应的数据结构是两种:ziplist(压缩列表),hashtable(哈希表)。当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable。
Redis - ZSet
有序集合。
基础操作
zadd
zrem
zrange
zrangebyscore
zrevrangebyscore
zincrby
zcount
zrank
数据结构
SortedSet (ZSet) 是Redis提供的一个非常特别的数据结构,一方面它等价于Java的数据结构Map<String, Double>,可以给每一个元素value赋予一个权重score,另一方面它又类似于TreeSet,内部的元素会按照权重score进行排序,可以得到每个元素的名次,还可以通过score的范围来获取元素的列表。
zset底层使用了两个数据结构
(1)hash,hash的作用就是关联元素value和权重score,保障元素value的唯一性,可以通过元素value找到相应的score值。
(2)跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表。
Redis -Bitmaps
Bitmaps 这个“数据类型”可以实现对位的操作。
Bitmaps本身不是一种数据类型, 实际上它就是字符串(key-value) , 但是它可以对字符串的位进行操作。
Bitmaps单独提供了一套命令, 所以在Redis中使用Bitmaps和使用字符串的方法不太相同。 可以把Bitmaps想象成一个以位为单位的数组, 数组的每个单元只能存储0和1, 数组的下标在Bitmaps中叫做偏移量
基础操作
setbit
getbit
bitcount
bitop and(or/not/xor)
Redis - HyperLogLog
基础操作
pfadd
pfcount
pfmerge
Redis - Geospatial
GEO,Geographic,地理信息的缩写。该类型,就是元素的2维坐标,在地图上就是经纬度。
基础操作
geoadd
geopos
geodist
georadius
发布订阅模式
是一种消息通信模式,有发布者和订阅者两个身份。
本文来自博客园,作者:klaus08,转载请注明原文链接:https://www.cnblogs.com/klaus08/p/15316129.html