一、简介

字符串类型是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学习笔记【04】 - 字符串相关推荐

  1. Redis学习笔记(B站狂神说)(自己总结方便复习)

    Redis学习笔记B站狂神说 redis: 非关系型数据库 一.NoSQL概述 1.为什么要用Nosql 1.单机Mysql的年代 思考一下,这种情况下:整个网站的瓶颈是什么? 1.数据量如果太大,一 ...

  2. Redis学习笔记~分布式的Pub/Sub模式

    redis的客户端有很多,这次用它的pub/sub发布与订阅我选择了StackExchange.Redis,发布与订阅大家应该很清楚了,首先一个订阅者,订阅一个服务,服务执行一些处理程序(可能是写个日 ...

  3. Redis学习笔记——SpringDataRedis的使用

    与Spring集成 我需要哪些jar包? <dependency><groupId>org.springframework.data</groupId><ar ...

  4. ES6学习笔记04:Set与Map

    ES6学习笔记04:Set与Map JS原有两种数据结构:Array与Object,ES6新增两种数据结构:Set与Map 一.Set数据结构 Set类似于数组,但是成员值不允许重复,因此主要用于数据 ...

  5. Redis学习笔记(实战篇)(自用)

    Redis学习笔记(实战篇)(自用) 本文根据黑马程序员的课程资料与百度搜索的资料共同整理所得,仅用于学习使用,如有侵权,请联系删除 文章目录 Redis学习笔记(实战篇)(自用) 1.基于Sessi ...

  6. Redis(学习笔记)

    Redis学习笔记 1.NoSQL数据库 1.1解决的问题 1.1.1解决CPU及内存压力 1.1.2解决IO压力 1.2NoSQL数据库概述 1.2.1什么是NoSQL数据库 1.2.2适用与不适用 ...

  7. Redis学习笔记①基础篇_Redis快速入门

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 资料链接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA( ...

  8. StackExchange.Redis学习笔记(二) Redis查询 五种数据类型的应用

    StackExchange.Redis学习笔记(二) Redis查询 五种数据类型的应用 原文: StackExchange.Redis学习笔记(二) Redis查询 五种数据类型的应用 Connec ...

  9. Redis学习笔记(一) 数据类型事务异常Jredis

    Redis学习笔记(一) NoSql概述 Nosql四大分类 Redis入门 简介 Windows安装 基础使用 问题 Redis4.0之前为什么是单线程 单线程为什么这么快 Redis4.0后的多线 ...

  10. zset获取指定score_redis zset更新score redis学习笔记5 - Redis - 服务器之家

    redis zset更新score redis学习笔记5 发布时间:2017-04-03 来源:服务器之家 一:概述 zset全称为sorted-sets类型,和set数据类型有极为相似,都是字符串的 ...

最新文章

  1. Golomb及指数哥伦布编码原理介绍及实现
  2. How to run a estimaton
  3. input-text
  4. ImportError : No module named graphics
  5. 企业 IT 架构转型之道 阿里巴巴中台战略思想与架构实战
  6. 怎样选择图纸加密软件?
  7. 用户登录页面以及后台方法、拦截器
  8. rest-assured一些使用心得
  9. matlab抠图数据,MATLAB抠图
  10. coco人体姿态估计标注软件
  11. 海思3559AV100 HiSysLink 之 IPCMSG
  12. 微头条自媒体常见领域,好创作,快速实现自媒体变现
  13. Franka Emika Panda机械臂规划路径时,rviz中手爪显示碰撞
  14. 千万别在老家买房了,因为那儿通高铁
  15. IO_FILE hack FSOP
  16. 英语单词词性顺口溜_英语词性修饰关系顺口溜
  17. 【元胞自动机】元胞自动机交通事故通行【含Matlab源码 1345期】
  18. linux安装mysql时使用临时密码登录不进去mysql: [Warning] Using a password on the command line interface can be insec
  19. ie6 兼容整理《一》
  20. 并发编程(进程、线程、协程)

热门文章

  1. mac下安装office软件
  2. 选择墓地风水的注意事项
  3. 暑假博客二:由前序中序遍历生成二叉树
  4. 郑州达内解析UI设计师与UE设计师两者区别
  5. Angular 全局监听键盘事件
  6. 我用索引下推把MySQL性能一下优化了100倍,你信吗?
  7. java实现打印杨辉三角
  8. mysql的like字段名_MySQL LIKE 字句使用详情
  9. ISP图像调优(支持工业相机)
  10. oracle dump 源码,AIX 下的 core dump 分析入门