【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}}
【Redis开发与运维】学习笔记(三)-----Redis五种数据结构

命令作用 命令 备注
设置值 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

注意

  1. 在使用hgetall时,如果哈希元素个数比较多,会存在阻塞Redis的可能。如果开发人员只需要获取部分field,可以使用hmget,如果一定要获取全部field-value,可以使用hscan命令,该命令会渐进式遍历哈希类型。
  2. hincrby hincrbyfloat
    hincrby和hincrbyfloat,就像incrby和incrbyfloat命令一样,但是它们的作用域是filed
  3. 计算value的字符串长度
    hstrlen key field

内部编码

列表

列表(list)类型是用来存储多个有序的字符串。在Redis中,可以对列表两端插入(push)和弹出(pop),还可以获取指定范围的元素列表、获取指定索引下标的元素等。列表是一种比
较灵活的数据结构,它可以充当栈和队列的角色,在实际开发上有很多应用场景

常见命令
【Redis开发与运维】学习笔记(三)-----Redis五种数据结构

命令作用 命令 备注
从右边插入 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范围的数据