【Redis开发与运维】学习笔记(三)-----Redis五种数据结构
Redis五种数据结构
字符串
常用命令
命令作用 | 命令 | 备注 |
---|---|---|
设置值 | set key value [ex seconds] [px milliseconds] [nx|xx] |
ex seconds:为键设置秒级过期时间。命令setex key seconds value seconds; px milliseconds:为键设置毫秒级过期时间。nx:键必须不存在,才可以设置成功,用于添加。命令setnx key val xx:与nx相反,键必须存在,才可以设置成功,用于更新。 |
获取值 | get key |
如果要获取的键不存在,则返回nil(空) |
批量设值 | mset key value [key value ..] |
批量操作命令可以有效提高开发效率 |
批量获取值 | mget key [key ..] |
|
自增操作 | incr key |
|
自减操作 | decr key |
|
自增指定数字 | incrby key increment| |
|
自减指定数字 | decrby key increment |
|
自增浮点数 | incrbyfloat key increment |
|
追加值 | append key val |
|
字符串长度 | strlen key |
|
设置并返回原值 | getset key val |
getset和set一样会设置值,但是不同的是,它同时会返回键原来的值 |
设置指定位置的字符 | setrange key offeset val |
|
获取部分字符串 | getrange key start end |
start和end分别是开始和结束的偏移量,偏移量从0开始计算 |
重点:
setnx和setxx在实际使用中有什么应用场景吗?以setnx命令为例子,由于Redis的单线程命令处理机制,如果有多个客户端同时执行setnx key value,根据setnx的特性只有一个客户端能设置成功,setnx可以作为分布式锁的一种实现方案
内部编码
int:8个字节的长整型·
embstr:小于等于39个字节的字符串。
raw:大于39个字节的字符
Redis会根据当前值的类型和长度决定使用哪种内部编码实现
哈希
在Redis中,哈希类型是指键值本身又是一个键值对结构,形如value={{field1,value1},…{fieldN,valueN}}
命令作用 | 命令 | 备注 |
---|---|---|
设置值 | hset key field val |
设置成功会返回1,反之会返回0,支持hsetnx |
获取值 | hget key fie |
如果键或field不存在,会返回nil |
删除field | hdel key field [field ..] |
hdel会删除一个或多个field,返回结果为成功删除field的 |
计算field个数 | hlen key |
|
批量设置field-val | hmget key field [field ...] |
|
批量获取field-val | hmset key field value [field value .. ] |
|
判断field是否存在 | hexists key fie |
|
获取所有field | hkeys key |
|
获取所有value | hvals key |
|
获取所有的field-value | hgetall key |
注意
- 在使用hgetall时,如果哈希元素个数比较多,会存在阻塞Redis的可能。如果开发人员只需要获取部分field,可以使用hmget,如果一定要获取全部field-value,可以使用hscan命令,该命令会渐进式遍历哈希类型。
- hincrby hincrbyfloat
hincrby和hincrbyfloat,就像incrby和incrbyfloat命令一样,但是它们的作用域是filed - 计算value的字符串长度
hstrlen key field
内部编码
列表
列表(list)类型是用来存储多个有序的字符串。在Redis中,可以对列表两端插入(push)和弹出(pop),还可以获取指定范围的元素列表、获取指定索引下标的元素等。列表是一种比
较灵活的数据结构,它可以充当栈和队列的角色,在实际开发上有很多应用场景
常见命令
命令作用 | 命令 | 备注 |
---|---|---|
从右边插入 | rpush key value [value ..] |
lrange0-1命令可以从左到右获取列表的所有元素 |
从左边插入元素 | lpush key value [value ..] |
|
向某个元素前或者后插入元素 | linsert key before|after pivot val |
linsert命令会从列表中找到等于pivot的元素,在其前(before)或者后(after)插入一个新的元素value |
获取指定范围内的元素列表 | lrange key start end |
lrange操作会获取列表指定索引范围所有的元素。索引下标有两个特点:第一,索引下标从左到右分别是0到N-1,但是从右到左分别是-1到-N。第二,lrange中的end选项包含了自身,这个和很多编程语言不包含end不太相同 |
获取列表指定索引下标的元素 | lindex key index |
|
获取列表长度 | llen key |
|
从列表左侧弹出 | lpop key |
|
从列表右侧弹出 | rpop key |
|
删除指定元素 | lrem key count val |
lrem命令会从列表中找到等于value的元素进行删除,根据count的不同.分为三种情况:count>0,从左到右,删除最多count个元素。count<0,从右到左,删除最多count绝对值个元素。count=0,删除所有 |
按照索引范围修剪列表 | ltrim key start end |
只保留start-end范围的数据 |