Redis数据类型之String类型

简介

  • String类型是Redis最基本的数据类型,一个键最大能存储512MB
  • String数据结构是简单的key-value类型,value不仅是String类型,也可以是数字,是包含很多种类型的特殊类型。
  • String类型是二进制安全的,意思是Redis的String可以包含任何数据,比如序列号的对象存储,比如一张图片存储,比如一个简单的字符串,数值等待。

string(字符串)的内部结构

string(字符串)是Redis最简单也是使用最广泛的数据结构,它的内部是一个字符数组。如图所示:
在这里插入图片描述
Redis中string(字符串)是动态字符串,允许修改;它在结构上的实现类似于Java中的ArrayList(默认构造一个大小为10的初始数组),这是冗余分配内存的思想,也称为预分配;这种思想可以减少扩容带来的性能消耗。

在这里插入图片描述

string(字符串)的扩容

当string(字符串)的大小达到扩容阈值时,将会对string(字符串)进行扩容,string(字符串)的扩容主要有以下几个点:

  1. 长度小于1MB,扩容后为原先的两倍; length = length * 2
  2. 长度大于1MB,扩容后增加1MB; length = length + 1MB
  3. 字符串的长度最大值为 512MB

String命令

赋值语法

set

set key value [EX seconds] [PX milliseconds] [NX|XX] KEEPTTL
  • 多次设置key会覆盖,Redis set命令用于设置给定key的值,如果key已经存储值,set就覆写旧值,无视类型。
  • 通过EX(单位是秒) 和PX (单位是毫秒) 参数可以指定该变量的生存时间。在大多数场景里,应该合理设置对应的生存时间,否则可能会导致内存溢出问题。
  • NX 参数表示当key不存在时才进行设置值的操作,如果key存在,那么该命令不执行。XX参数表示当key存在时才进行操作。
  • KEEPTTL 是redis 6.0 的新特性,是指“保留生存时间”,既重复set时,保留原值的过期时间。
127.0.0.1:6379> set name zhangsan
OK
127.0.0.1:6379> get name
"zhangsan"
127.0.0.1:6379>

setnx命令如果key不存在,则设值并返回1,如果key存在,则不设值返回0

setnx key value 

如果key不存在,则设值并返回1,如果key存在,则不设值返回0,解决分布式锁方案之一,只有在key不存在的时候设置key的值,setnx(set if no exits)命令在指定key不存在时,为key设置指定的值。

127.0.0.1:6379> set name zhangsan
OK
127.0.0.1:6379> setnx name zhangsan

expire 过期时间

setex key expire value
#setex key 10 value

设置key的值时value,过期时间时10秒,十秒后key清除,可以使用ttl命令查看剩余时间。

127.0.0.1:6379> setex code 10 12345
OK
127.0.0.1:6379> ttl code
(integer) 5
127.0.0.1:6379> ttl code
(integer) -2
127.0.0.1:6379> get code
(nil)
127.0.0.1:6379>

Setrange 替换字符串

setrange key offset  value :替换字符串

从偏移量offset开始,覆写value(对于新的value长度如果小于旧值从offset到结束的长度时,长度小于的部分会保持不变),并返回当前value的长度。

特殊的情况如下:

  1. offset偏移量从0开始,只要offset偏移量小于0,就会报错(error) ERR offset is out of range.
  2. 如果offset的下标大于旧值的长度,中间的部分会用零字节(“\x00”)进行填充。
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> setrange db -1 redis //只要offset偏移量小于0,就会报错
(error) ERR offset is out of range
127.0.0.1:6379> setrange db 0 redis //如果没有,也会执行,相当于set key value,并返回当前长度
(integer) 5
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> setrange db 0 mogo //a.新的value从offset开始覆写,并返回当前长度
(integer) 5
127.0.0.1:6379> get db //b.覆写时value长度小于旧值从offset到旧值字符串结束时,不足的部分不变
"mogos"
127.0.0.1:6379> setrange db 0 mysql //覆写value,并返回操作之后的value的长度
(integer) 5
127.0.0.1:6379> get db
"mysql"
127.0.0.1:6379> setrange db 5 '+redis'
(integer) 11
127.0.0.1:6379> get db
"mysql+redis"
127.0.0.1:6379> del db //删除db的键值对
(integer) 1
127.0.0.1:6379> setrange db 1 redis //a.键db不存在,此时从offset=1开始覆写
(integer) 6
127.0.0.1:6379> get db  //b.offset前面(下标为0)value部分会用“\x00”填充
"\x00redis"

取值语法

get 用于获取指定key的值

get key

Redis get命令用于获取指定key的值,如果key不存在,则返回nil,如果key储存的值不是字符串类型,返回一个错误

127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> get db1
(nil)

getrange 用于获取存储在指定key中字符串的字符串

getrange key start end

用于获取存储在指定key中字符串的字符串,字符串的截取范围由start和end两个偏移量确定,(start和end包括在内)

127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> GETRANGE db 0 2
"red"

getbit

getbit key offset

对key所存储的字符串值,获得指定偏移量上的位(bit)

getset用于设置指定key的值,并返回key的旧值

getset key value

getset命令用于设置指定key的值,并返回key的旧值,当key不存在时,返回nil

127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> getset db java
"redis"
127.0.0.1:6379> get db
"java"

strlen 返回key所存储的字符串长度

strlen key

返回key所存储的字符串长度

127.0.0.1:6379> get db
"java"
127.0.0.1:6379> strlen db
(integer) 4

删除语法

del 删除指定的key

del key

删除指定的key,如果存在,返回值数字类型1

127.0.0.1:6379> keys *
1) "db"
127.0.0.1:6379> del db2
(integer) 0
127.0.0.1:6379> del db
(integer) 1

批量操作

批量写mset

mset k1 v1 k2 v2

批量写 mset k1 v1 k2 v2 一次性写入多个值

127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> mset name dhx name2 dhx2
OK
127.0.0.1:6379> keys *
1) "name2"
2) "name"

批量读 mget

mget k1 k2 

mget k1 k2 一次性读多个值

127.0.0.1:6379> mget name name2
1) "dhx"
2) "dhx2"

自增自减

incr

incr key

incr命令将key中存储的数字值加1,如果key不存在,那么key的值会先被初始化为0,然后在执行incr操作。

127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> get num
"1"
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> get num
"2"
127.0.0.1:6379> incr num
(integer) 3

decr

decr key 

decr命令将key中存储的数字值减1

incrby

incrby  key 增量值

incrby命令将key缓存的数据加上指定的增加值

decrby

decrby key 减量值

incrby命令将key缓存的数据减去指定的值

注意 ;这些自增自减的对应key必须是数字类型字符串,否则会报错

字符串拼接

append key value

append命令用于为指定的key追加至末尾,如果不存在,则为其赋值

应用场景

在这里插入图片描述
RedisTemplate redis缓存的基本使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值