首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis中的String类型

Redis中的String类型

作者头像
爱敲代码的猫
发布2020-04-22 11:44:07
1.2K0
发布2020-04-22 11:44:07
举报
文章被收录于专栏:爱敲代码的猫爱敲代码的猫

Redis-String

本文章记录Redis中String数据类型的笔记

  • 结构
  • 内部编码
  • 命令和栗子

结构

key

value

hello

world(字符串)

counter

1(整型Redis这里会字符串类型转换)

bits

10111101(二进制在位图有用到)

data

JSON数据"{...}"

PS:「value最多存512MB上限」,Redis字符串类型用于场景这里举几个栗子,缓存,计数器(播放量和浏览量等),分布式锁等等。

内部编码

String类型的内部编码有三个分别是intrawembstr,下面介绍一下它们:

  • 「int编码」 :保存long型的64位有符号整数
  • 「raw编码」:保存长度小于44字节的字符串
  • 「embstr编码」:保存长度大于44字节的字符串

可以利用object encoding key 进行查看String类型的key用的那些内部编码

127.0.0.1:6379> object encoding str
"raw"
127.0.0.1:6379> set str 123456789123456789
OK
127.0.0.1:6379> object encoding str
"int"
127.0.0.1:6379> set str 1234567891234567899999
OK
127.0.0.1:6379> object encoding str
"embstr"

命令和栗子

「get,set,del」

API命令

详解

时间复杂度

get key

获取指定 key 的对应的value

O(1)

set key value

设置 key - value

O(1)

del key

删除 key - value

O(1)

127.0.0.1:6379> get aquan
"aquan"
127.0.0.1:6379> set name "aquan"
OK
127.0.0.1:6379> get name
"aquan"
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> get name
(nil)

「incr, decr,incrby,decrby」

API命令

详解

时间复杂度

incr key

key自增1,如果不存在key,自增后get key = 1

O(1)

decr key

key自减1,如果不存在key,自减后get key = -1

O(1)

incrby key num

key自增num,如果不存在key,自增后get key = num

O(1)

decrby key count

key自减num,如果不存在key,自增后get key = -num

O(1)

127.0.0.1:6379> get count
(nil)
127.0.0.1:6379> incr count
(integer) 1
127.0.0.1:6379> get count
"1"
127.0.0.1:6379> incrby count 99
(integer) 100
127.0.0.1:6379> decr count
(integer) 99
127.0.0.1:6379> get coutn
(nil)

「set,setnx,set xx」

API命令

详解

时间复杂度

set key value

不管 key 是否存在,都设置

O(1)

setnx key value

key不存在,才设置(add)

O(1)

set key value xx

key存在,才设置(updata)

O(1)

PS:setnx可以理解为数据的ADD操作,set xx理解为更新操作

127.0.0.1:6379> exists name
(integer) 0
127.0.0.1:6379> set name "aquan"
OK
127.0.0.1:6379> setnx name "666"
(integer) 0
127.0.0.1:6379> get name
"aquan"
127.0.0.1:6379> set name "nb" xx
OK
127.0.0.1:6379> get name
"nb"
127.0.0.1:6379> exists java
(integer) 0
127.0.0.1:6379> setnx java "nb"
(integer) 1
127.0.0.1:6379> get java
"nb"

「mget,mset」

API命令

详解

时间复杂度

mget key1 key2 key3 ...

批量获取key

O(n)

mset key1 value1 key2 value2 ..

批量设置key - value

O(n)

127.0.0.1:6379> mset key1 value1 key2 value2 key3 value3
OK
127.0.0.1:6379> mget key1 key2 key3
1) "value1"
2) "value2"
3) "value3"

PS:在适量的情况下mget比多次使用单个get获取key值效率高,速度快


「getset,append,strlen」

API命令

详解

时间复杂度

getset key value

set key newvalue并且返回旧的value

O(1)

append key value

将value追加到旧的value

O(1)

strlen key

返回字符串的长度

O(1)

PS:注意中文使用strlen的时候,一个中文的长度为2

127.0.0.1:6379> getset name "aquan"
"nb"
127.0.0.1:6379> append name "666"
(integer) 8
127.0.0.1:6379> get name
"aquan666"
127.0.0.1:6379> strlen name
(integer) 8

「incrbyfloat,getrange,setrange」

API命令

详解

时间复杂度

incrbyfloat key 2.8

增加对应key的值2.8

O(1)

getrange key start end

获取字符串指定下标所有的值

O(1)

setrange key index value

设置指定下标所有对应的值

O(1)

127.0.0.1:6379> incr count
(integer) 100
127.0.0.1:6379> incrbyfloat count 2.8
"102.8"
127.0.0.1:6379> get count
"102.8"
127.0.0.1:6379> set str abcdef
OK
127.0.0.1:6379> getrange str 0 2
"abc"
127.0.0.1:6379> setrange str 2 "zzz"
(integer) 6
127.0.0.1:6379> get str
"abzzzf"
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 爱敲代码的猫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Redis-String
    • 结构
      • 内部编码
        • 命令和栗子
        相关产品与服务
        云数据库 Redis
        腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档