Redis数据结构简介
Redis可以存储键与5种不同数据结构类型之间的映射,这五种数据结构分别为String(字符串)、List(列表)、Set(集合)、Hash(散列)、和Zset(有序集合)。
结构类型 | 结构存储的值 | 结构的读写能力 |
---|---|---|
String | 字符串、整数或者浮点数 | 对整个字符串或者字符串的一部分执行操作;对整数和浮点数执行自增或者自减操作 |
List | 一个链表,链表上的每个节点都包含一个字符串 | 从链表的两端推入或者弹出元素;根据偏移量对链表进行修剪(trim);读取单个或者多个元素;根据值查找或者移除元素 |
Set | 包含字符串的无序收集器 ,并且被包含的每个字符串都是独一无二、各不相同的 | 添加、获取、移除单个元素;检查一个元素是否存在于集合中;计算交集、并集、差集;从集合里面随机获取元素 |
Hash | 包含键值对的无序散列表 | 添加、获取、移除单个键值对;获取所有键值对 |
ZSet | 字符串成员与浮点数分值之间的有序映射,元素的排列顺序由分值的大小决定 | 添加、获取、移除单个元素;根据分值范围或者成员来获取元素 |
Redis中的字符串
字符串可以存储以下3种类型的值
- 字符串
- 整数
- 浮点数
基本操作:
命令 | 用例 | 描述 |
---|---|---|
GET | get key-name | 获取字符串的值 |
Set | set key-name | 设置字符串的值 |
Del | del key-name | 删除字符串的值 |
整数和浮点数类型操作:
命令 | 用例 | 描述 |
---|---|---|
INCR | incr key-name | 将键存储的值加1 |
DECR | decr key-name | 将键存储的值减去1 |
INCRBY | incrby key-name amount | 将键存储的值加上整数amount |
DECRBY | decrby key-name amount | 将键存储的值减去整数amount |
INCRBYFLOAT | incrbyfloat key-name amount | 将键存储的值减去浮点数amount |
当用户将一个值存储到Redis字符串里面的时候,如果这个值可以被解释为十进制整数或者浮点数,那么Redis就允许用户对这个字符串执行各种incr *和decr *操作。如果用户对一个不存在的键或者一个保存了空串的键执行自增或者自减操作,那么redis在执行操作时会将这个键的值当作0来处理。
如果用户尝试对一个值无法被解释为整数或者浮点数的字符串键执行自增或者自减操作,那么Redis会向用户返回一个错误。
字符串操作:
命令 | 用例 | 描述 |
---|---|---|
APPEND | append key-name value | 将值value追加到给定键当前存储的值的末尾 |
GETRANGE | getrange key-name start end | 获取一个由偏移量start至偏移量end范围内所有字符组成的子串,包括start 和end |
SETRANGE | setrange key-name offset value | 从指定的偏移量offset开始,用给定的值覆盖原有值 |
GETBIT | getbit key-name offset | 将字节传看作是二进制位串(bit string),返回位串中偏移量为offset的二进制位的值 |
SETBIT | setbit key-name offset value | 将字节传看作是二进制位串,并将位串中偏移量为offset的二进制位的值设置为value |
BITCOUNT | bitcount key-name < start end> | 统计二进制位串里值为1的二进制位的数量,如果给定了可选的start和end。那么只对偏移量指定范围内的二进制位进行统计 |
BITTOP | bittop operation dest-key key-name [key-name…] | 对一个或者多个二进制位串执行包括 并、或、异或、非在内的任意一种按位运算操作,并将结果值保存到dest-key中 |
补充:什么是二进制位串?
假设我们有一个键 mykey,其二进制表示为 01001000 01100101 01101100 01101100 01101111(对应字符串 “Hello”)。 那么 字符H的二进制位串表示为0【第0位】1【第1位】0【第2位】0【第3位】1【第4位】0【第5位】0【第6位】0【第7位】,获取偏移量为6的位值为0.即getbit mykey 6 返回结果0。