Redis复习之 五种数据结构

147 阅读2分钟

String

string是redis的字符串类型

常用操作:

GETSET key value : 将指定的key设置为value并返回原先的值。

SETEX key seconds value : 设置key并设置固定的value。

SETNX key value :当key不存在时,设置key的值,

每个String类型的value的占用内存不能超过512M

List

List底层是一个双向链表结构。

Lpush : 左侧推入元素。

Lpop : 左侧弹出元素。

Rpush : 右侧推入元素。

Rpop : 右侧弹出元素。

Lrange : 取出一定范围的元素。

Lindex : 取出指定下标的元素。

Hash

类似于hashMap

由于大hash的扩容是要占用很多时间,需要重新申请数组,单进程的redis很难承受这样的操作,因此采用了渐进式的操作。

字典结构的内部持有了两个hashtable,未扩容时一个table为空,当需要扩容时,会将一个hashtable的值逐步搬到另一个hashtable的值。当搬迁完成时,新的hashtable会成为0号table,而旧的hashtable会成为1号,当下次rehash时,他就成了新的搬迁目标。

发生rehash的时机:

扩容:当hash中的元素等于数组的元素时,也就是hash中的元素个数与数组长度时。 扩容的新数组是 原数组大小的 2 倍 ,如果系统正在做持久化命令,Redis会不去扩容,除非达到了数组长度的5倍,会进行强制扩容。

缩容:当hash中的元素小于数组中10%时。

Set

相当于HashSet,不能用重复的数据,

Zset

相当于一个可以打分的set的集合,继承了set的特点,在设置值时可以给他一个分数。可以根据分数排序展示。

BITMAP

通过一个bit位的值来表示某个元素对应的值或者状态(只能0或1)

SETBIT key offset value : 设置key的某个索引的值

一般可以用作签到的统计

如:

setbit 日期 用户的id 是否签到(0或者1)