美文网首页
Redis学习笔记【04】 - 字符串

Redis学习笔记【04】 - 字符串

作者: 四月不见 | 来源:发表于2018-08-10 02:22 被阅读12次

一、简介

字符串类型是redis最基础的数据结构。首先键都是字符串类型,而其它几种数据结构类型都是在字符串类型基础上构建的,所以字符串类型能为其他四种数据结构的学习奠定基础。

字符串类型的值实际可以是字符串(简单的字符串、复杂的字符串(例如:JSON、XML))、数字(整数、浮点数)、甚至是二进制(图片、音频、视频),但值最大不能超过512MB。

二、命令

1、常用命令

1)设置值

set key value [ex seconds] [px milliseconds] [nx|xx]

下面操作设置键hello,返回结果为OK则代表设置成功:

127.0.0.1:6379> set hello npsee
OK

set命令有几个选项:

  • ex seconds:为键设置秒级过期时间。
  • px milliseconds:为键设置毫秒级过期时间。
  • nx:键必须不存在,才可以设置成功,用于更新。
  • xx:与nx相反,键必须存在,才可以设置成功,用于更新。

除了set选项,redis还提供了setex和setnx两个命令,其作用和ex和nx选项是一样的:

setex key seconds value
setnx key value

例:

2)获取值

get key

如果要获取的键不存在,则返回nil(空)。

3)批量设置值

mset key value [key value ...]

如:

127.0.0.1:6379> mset a 1 b 2 c 3 d 4
OK

4)批量获取值

mget key [key ...]

如:

127.0.0.1:6379> mget a b c d e
1) "1"
2) "2"
3) "3"
4) "4"
5) (nil)

如果有些键不存在,那么它的值为nil,结果是按照传入键的顺序返回

5)计数

incr key

incr命令用于对值做自增操作,返回的结果分为有一种情况:

  • 值不是整数,返回错误。
  • 值是整数,返回自增后的结果。
  • 键不存在,按照值为0自增,返回结果为1。

如:

127.0.0.1:6379> exists key
(integer) 0
127.0.0.1:6379> incr key
(integer) 1
127.0.0.1:6379> incr key
(integer) 2
127.0.0.1:6379> set hello nosee
OK
127.0.0.1:6379> incr hello
(error) ERR value is not an integer or out of range

除了incr命令,redis提供了decr(自减)、incrby(自增指定数字)、decrby(自减指定数字)、incrbyfloat(自增浮点数)。

2、不常用命令

1)追加值

append key value

append可以向字符串尾部追加值,如:

127.0.0.1:6379> get hello
"nosee"
127.0.0.1:6379> append hello 123
(integer) 8
127.0.0.1:6379> get hello
"nosee123"

2)字符串长度

strlen key

如:

127.0.0.1:6379> get hello
"nosee123"
127.0.0.1:6379> strlen hello
(integer) 8

下面操作返回结果6,因为每个中文占用3个字节:

127.0.0.1:6379> set hello '不见'
OK
127.0.0.1:6379> strlen hello
(integer) 6

3)设置并返回原值

getset key value

getset和set一样会设置值,但不同的是,它同时会返回键原来的值,如:

127.0.0.1:6379> getset test no
(nil)
127.0.0.1:6379> getset test see
"no"

4)设置指定位置的字符

setrange key offeset value

下面操作将值由pest变成best:

127.0.0.1:6379> set hello pest
OK
127.0.0.1:6379> setrange hello 0 b
(integer) 4
127.0.0.1:6379> get hello
"best"

5)获取部份字符串

getrange key start end

偏移量从0开始计算,如:

127.0.0.1:6379> get hello
"best"
127.0.0.1:6379> getrange hello 1 2
"es"

3、字符串类型命令时间复杂度

命令 时间复杂度
set key value O(1)
get key O(1)
del key [key ...] O(k),k是键的个数
mset key value [key value ...] O(k),k是键的个数
mget key [key ...] O(k),k是键的个数
incr key O(1)
decr key O(1)
incrby key increment O(1)
decrby key decrement O(1)
incrbyfloat key increment O(1)
append key value O(1)
strlen key O(1)
setrange key offset value O(1)
getrange key start end O(n),n是字符串长度,由于获取字符串非常快,所以如果字符串不是很长,可以视同为O(1)

三、内部编码

字符串类型的内部编码有三种类型:

  • int:8个字节的长整形。
  • embstr:小于等于39个字节的字符串。
  • raw:大于39个字节的字符串。

redis会根据当前值的类型和决定使用哪种内部编码实现。

127.0.0.1:6379> set hello 4562
OK
127.0.0.1:6379> object encoding hello
"int"
127.0.0.1:6379> set hello 'hi, noseee!'
OK
127.0.0.1:6379> object encoding hello
"embstr"
127.0.0.1:6379> set hello 'hi, noseee! my name is calvin chan. what is you name?'
OK
127.0.0.1:6379> object encoding hello
"raw"
127.0.0.1:6379> strlen hello
(integer) 53

参考:

《Redis开发与运维》 付磊 & 张益军

相关文章

  • 《Redis实战》—读书笔记—第3章

    《Redis实战》—读书笔记—第3章 2017年10月04日00:50:03 3.1 字符串 字符串可以存储3种类...

  • Redis学习笔记【04】 - 字符串

    一、简介 字符串类型是redis最基础的数据结构。首先键都是字符串类型,而其它几种数据结构类型都是在字符串类型基础...

  • 【Redis】Redis学习笔记(五)jedis(JedisCl

    redis系列文章目录 redis学习笔记(一)redis3.2.5集群安装与测试 redis学习笔记(二)Jed...

  • redis 入门笔记

    redis 入门笔记 redis中文文档 [TOC] string (字符串) redis 是一个键值对的数据库,...

  • Redis学习笔记:事务

    Redis学习笔记:事务 原文链接:Redis学习笔记:事务 一、事务的描述 和MySQL一样,Redis中也有事...

  • Redis 参数

    Redis Redis 学习笔记 II 常见参数配置

  • redis设计与实现读书笔记

    参考文档:redis设计与实现读书笔记 第二版 一、数据结构和对象 1.关于字符串 redis底层存储字符串结构为...

  • 2018-11-12

    Redis学习笔记 Redis在在线测试 Redis官网 REmote DIctionary Server(Red...

  • Redis--数据类型命令(一)

    Redis字符串(string) Redis字符串数据类型的相关命令用于管理redis字符串值 语法: redis...

  • Redis数据库

    1、redis安装和启动 redis-cli -h ip见文档 2、redis函数学习 字符串、队列、集合、哈希、...

网友评论

      本文标题:Redis学习笔记【04】 - 字符串

      本文链接:https://www.haomeiwen.com/subject/scbcbftx.html