redis基础-数据类型以及常用命令-上

120 阅读5分钟

这是我参与8月更文挑战的第8天,活动详情查看:8月更文挑战

概述

redis是实际项目中经常用作缓存的数据库,因为其支持丰富的数据类型,所以其应用范围特别广,本篇将记录和介绍下自己所理解和熟知的数据类型,主要内容包含如下

  • string类型以及其常用的命令以及示例
  • hash类型以及常用的命令以及示例
  • list类型以及常用命里和示例

string类型以及其常用的命令以及示例

stirng类型

string类型是redis中最基础的数据类型,一个key最多能存储512MB的数据

常用命令

命令功能描述语法示例
set设置key对用的值为valueset key value [EX Seconds] [PX milliseconds] [Nx]set testStr 'test'
get设置key获取对应的value,如果返回结果为空将返回nil,如果键值不是字符串类型则返回报错get keyget testStr
getrange返回字符串的一部分getrange key 起始点 结束点getrange testStr 0 4
getset设置指定key的值,并返回旧值getset key valuegetset testStr2 'comming'
mset一次设置多个键值对mset key value [key value ...]mset key1 'value1' key2 'value2'
mget一次获取多个键值对mget key1 key2mget key1 key2
strlen获取key字符长度strlen keystrlen key
setrange将字符串中国的某一部分换成其他zhi ,并返回修改后的字符串长度setrange key offset valuesetrange testStr 6 'queen'
setnxNS代表not exists,只有key不存在的时候才会设置成功,避免覆盖setnx key valuesetnx testStr 'king'
setex原子性操作,设置key的过期时间,设置生存时间与设置值在同一个动作内完成setex key 时间 value值setex testStr 60 'expired string'
msetnx一次设置多个key的值,类似mset,但只有key不存在的时候才能设置成功,当有一个key是已经存在,那么所有的key都会设置失效,成功返回整形1,失败返回0mset key value [key value ...]msetnx testStr1 'a' testStr2 'b'
psetex与setex相似,P代表以毫秒为单位设置key的生存时间,使用pttl获取key剩余存活时间psetex key millionseconds vlauepsetex test16 2000 'hello,world'
incr对key中存储的数字+1,如果key不存在则先初始化为0,在执行INCR。如果值超出了范围或者非整数则会报错incr keyincr testStr
incrby将key中存储的数字加上指定整形增量(只支持整形数字,不支持浮点数)incrby key numberincrby testStr 5
decr将key中存储的数字减一decr keyincrby decrStr
decrby将key中存储的数字递减指定整形增量(只支持整形数字,不支持浮点数)decrby key decrementdecrby decrStr 5
append在值的末尾追加字符,如果key不存在则相当于set操作append key valueappend appStr '12'

hash类型以及常用命令

hash类型

hash类型又称为散列表。也是一个键值对的集合。适用于存储对象,将对象存入hash表中能节省内存。

  • hash-max-ziplist-entries 512 表示hash类型存储的最大值,512个字节
  • hash-max-ziplist-value 64 设置hash类型存储字段的数目,默认64个

常用命令

命令功能描述语法示例
hset将hash表key中的阈field设置成指定的valuehset key field valuehset userInfo username 'test'
hget返回hash表key指定field的值hget key fieldhget userInfo username
hsetnxhash表中field不存在时候才复制,相当于not existhsetnx key field valuehsetnx testHash key1 'a'
hmset同时将多个field-value设置到hash表的key中,如果field存在,值则会覆盖hsetnx key field value field value ...hset userInfo username 'name1' password 'password'
hmget一次获取hash表中多个field的值,如果key中的field不存在,则返回nilhmget key field field2hmget userinfo username password email
hgetall返回hash表中key中所有field和value,奇数行是key,偶数行是valuehgetall keyhgetall userinfo

list类型以及常用命令

list类型

列表类型,是一个简单的字符串列表,通过插入顺序排序,最多存储2的32次方减一个元素,底层是通过双向链表实现,获取越接近两端的元素越快,列表通过

相关命令

命令功能描述语法示例
lpush向列表左端添加元素,一次可以添加一个或者多个lpush key value1 value2lpush mylist a b c
rpush向列表右端添加元素,一次可以添加一个或者多个rpush key value1 value2rpush mylist a b c
lpushx向列表左端添加元素,一次可以添加一个或者多个,但是只有key存在时候才添加元素lpushx key value1 value2lpushx mylist a b c
rpushx向列表右端添加元素,一次可以添加一个或者多个,但是只有key存在时候才添加元素rpushx key value1 value2rpushx mylist a b c
lpop将列表头部一个元素弹出lpop keylpop mylist
rpop将列表尾部一个元素弹出rpop keyrpop mylist
llen获取列表的长度llen keyllen mylist
lrange获取列表片段,0代表列表的第一个元素,1表示列表的第二个元素,-1代表最后一个元素,复数代表从后往前数lrange key start stoplrange mylist 0 -1
lrem删除列表中指定的参数,count中分为几种情况,大于0表示从列表的头开始,向尾部搜索,移除与value相等数量的元素,移除count个;小于0表示从尾部向头部搜索,移除与value相等的元素,移除count个;等于0表示移除列表中所有与value相等的元素lrem key count valuelrem mylist 2 a
lindex获取指定索引元素的值,根据索引找到之,命令后面跟一个数字,可以是正数也可以是负数lindex key index startlindex mylist 2
lset设置指定索引的值,根据索引设置值lset key index valuelset mylist 2 king
ltrim只保留列表的片段,其他都删除,只保留起点到结束点之间的元素ltrim key start endltrim mylist 0 1
linsert向列表中插入元素,插入pivot之前或者之后,当pivot不存在时不做操作linsert key before/after pivot valuelinsert mylist BEFORE 'b' 'king'