Redis中的数据结构及基本操作

发布于 2020-04-04  126 热度


Redis支持的数据结构

redis是一种高级的key-value的存储系统,其中value支持五种数据类型:
* 字符串(String)
* 哈希(Hash)
* 字符串列表(List)
* 字符串集合(Set)
* 有序字符串集合(Sorted Set)

关于key的定义有以下要求
* key不要太长,最好不要操过1024字节,太长会消耗内存还会降低效率。
* key不要太短,如果太短会降低key的可读性。
* 在项目中,key最好有一个统一的命名规范。

基本通用操作

  • keys * :查看所有的key
  • del key:删除指定的key
  • exists key:判断一个key是否存在
  • rename oldkey newkey:重命名
  • expire key:秒数:
  • ttl key:查看一个key剩余存活时间(-1:持久存活,-2:不存在)
  • type:判断一个可以属于什么类型

String

字符串是Redis中最基础的数据存储类型,最多可容纳的字符串长度是512M。

赋值

set key value:
设定key-value,如果key存在则覆盖。操作完成返回OK。

> set blog kxblog
OK

取值

get key:获取key的value,如果value不是String类型,redis将返回错误信息,因为get只能获取String类型的value。如果key不存在,返回(nil)。

> get blog
"kxblog"
> get newview
(nil)

删除

del key:删除指定key

> del blog
(integer) 1

数值增减

将字符串转成数字后进行增减。若key不存在,其初始值为0。若key存在但不能转成数字,报错。
返回值为增减后的值。
* incr key:自增1
* decr key:自减1
* incrby key increment:自增指定值
* decrby key decrement:自减指定值

> set num 0
OK
> incr num
(integer) 1
> incrby num 10
(integer) 11
> decr num
(integer) 10
> decrby num 4
(integer) 6

拼接

append key value:拼接字符串,若key存在,则在原value后追加该值,否则创建一个key-value。
返回值为字符串长度。

> set str kx
OK
> append str blog
(integer) 6

存储Hash

Redis的Hash类型可以看成具有String Key和String Value的Map容器。
每一个Hash可以存储4294967295个键值对。

赋值

  • hset key field value:为指定的key的field字段设定value。
    如果字段是哈希表中的一个新建字段,并且值设置成功,返回 1 。如果哈希表中域字段已经存在且旧值已被新值覆盖,返回 0 。
> hset blog name kxblog
(integer) 1
> hset blog site www.newview.top
(integer) 1
  • hmset key field value [field2 value2 ...]:设置多个。返回OK。
> hmset blog name kxblog site newview.top
OK

取值

  • hget key field:返回指定key的field的值
  • hmget key fields:返回指定key的多个filed的值
  • hgetall key:返回指定key的所有filed-value
> hget blog name
"kxblog"
> hmget blog name site
1) "kxblog"
2) "newvew.top"
> hgetall blog
1) "kxblog"
2) "newvew.top"
3) "KX"

删除

  • hdel key field[ filed2...]:删除key的指定字段,返回值是被删除的字段数。
  • del key:删除整个key。
> hdel blog author site
(integer) 2
> del blog
(integer) 1

增加数字

hincrby key field increment:设置key中的field值增加increment。返回增加后的值。

> hset myhash age 18
(integer) 1
> hincrby myhash age 2
(integer) 20

判断指定key-filed是否存在

hexists key field:判断指定key-filed是否存在。若存在返回1,不存在返回0.

> hexists blog name
(integer) 1
> hexists blog kxblog
(integer) 0

获取key中field的数量

hlen key:返回key中field的数量。

> hlen blog
(integer) 3

获取key中所有的field

hkeys key:返回key中所有的field。

> hkeys blog
1) "name"
2) "site"
3) "author"

获取key中所有的value

hvals key:返回key中所有的value。

> hvals blog
1) "kxblog"
2) "newview.top"
3) "KX"

List

赋值:

  • lpush key value value2 value3:将一个或多个值 value 插入到列表 key 的表头,如果 key 不存在,一个空列表会被创建并执行PUSH 操作。

  • rpush key value value2 value3:将一个或多个值 value 插入到列表 key 的表尾 (最右边),如果 key 不存在,一个空列表会被创建并执行PUSH 操作。

  • lset key index value:设置链表中指定索引的元素值,当index超出范围或key不存在报错。

取值:

  • lindex key index:返回列表 key 中,下标为 index 的元素
  • 左边:lpop key:移除并返回列表 key 的头元素。
  • 右边:rpop key:移除并返回列表 key 的尾元素。

获取指定区间元素

  • lrange key start stop:返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定。
  • lrange 0 -1:返回所有元素

获取元素的个数

llen key

扩展:

  • lpushx key value:若有则添加 若没有则不添加
  • rpushx key value:若有则添加 若没有则不添加
  • lrem key count value:从左边移除count个value
    若count>0 :从左边移除count个value
    若count<0 :从右边移除count个value
    若count=0 :从右边移除所有的value
  • ltrim key start stop:对一个列表进行修剪 (trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

Set

添加

sadd key value1 valuse2

删除

srem key value1 valuse2:移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。

获取

smembers key:返回集合 key 中的所有成员。不存在的 key 被视为空集合。

判断是否是是set中的一员

sismember key value

运算

  • 差集: sdiff s1 s2
  • 交集: sinter s1 s2
  • 并集: sunion s3 s4
  • SDIFFSTORE destination key [key ...]:这个命令的作用和SDIFF 类似,但它将结果保存到 destination 集合,而不是简单地返回结果集。
  • SINTERSTORE destination key [key ...]:这个命令类似于SINTER 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。
  • SUNIONSTORE destination key [key ...]:这个命令类似于SUNION 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。

获取数量

scard key:返回集合 key 的基数 (集合中元素的数量)

其他

  • srandmember key:随机获取一个元素
  • SMOVE source destination member:将 member 元素从 source 集合移动到 destination 集合。
  • SPOP key:移除并返回集合中的一个随机元素。

Sorted Set

添加元素

zadd key score m1 score m2

获取元素

zscore key m:获取指定成员的得分
zcard key:获取key的长度

删除元素

zrem

更多操作请查阅Redis命令参考手册

0
扫描二唯码在微信中打开

我一直在开辟我的天空