Redis学习笔记【04】 - 字符串
一、简介
字符串类型是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】 - 字符串相关推荐
- Redis学习笔记(B站狂神说)(自己总结方便复习)
Redis学习笔记B站狂神说 redis: 非关系型数据库 一.NoSQL概述 1.为什么要用Nosql 1.单机Mysql的年代 思考一下,这种情况下:整个网站的瓶颈是什么? 1.数据量如果太大,一 ...
- Redis学习笔记~分布式的Pub/Sub模式
redis的客户端有很多,这次用它的pub/sub发布与订阅我选择了StackExchange.Redis,发布与订阅大家应该很清楚了,首先一个订阅者,订阅一个服务,服务执行一些处理程序(可能是写个日 ...
- Redis学习笔记——SpringDataRedis的使用
与Spring集成 我需要哪些jar包? <dependency><groupId>org.springframework.data</groupId><ar ...
- ES6学习笔记04:Set与Map
ES6学习笔记04:Set与Map JS原有两种数据结构:Array与Object,ES6新增两种数据结构:Set与Map 一.Set数据结构 Set类似于数组,但是成员值不允许重复,因此主要用于数据 ...
- Redis学习笔记(实战篇)(自用)
Redis学习笔记(实战篇)(自用) 本文根据黑马程序员的课程资料与百度搜索的资料共同整理所得,仅用于学习使用,如有侵权,请联系删除 文章目录 Redis学习笔记(实战篇)(自用) 1.基于Sessi ...
- Redis(学习笔记)
Redis学习笔记 1.NoSQL数据库 1.1解决的问题 1.1.1解决CPU及内存压力 1.1.2解决IO压力 1.2NoSQL数据库概述 1.2.1什么是NoSQL数据库 1.2.2适用与不适用 ...
- Redis学习笔记①基础篇_Redis快速入门
若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 资料链接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA( ...
- StackExchange.Redis学习笔记(二) Redis查询 五种数据类型的应用
StackExchange.Redis学习笔记(二) Redis查询 五种数据类型的应用 原文: StackExchange.Redis学习笔记(二) Redis查询 五种数据类型的应用 Connec ...
- Redis学习笔记(一) 数据类型事务异常Jredis
Redis学习笔记(一) NoSql概述 Nosql四大分类 Redis入门 简介 Windows安装 基础使用 问题 Redis4.0之前为什么是单线程 单线程为什么这么快 Redis4.0后的多线 ...
- zset获取指定score_redis zset更新score redis学习笔记5 - Redis - 服务器之家
redis zset更新score redis学习笔记5 发布时间:2017-04-03 来源:服务器之家 一:概述 zset全称为sorted-sets类型,和set数据类型有极为相似,都是字符串的 ...
最新文章
- Golomb及指数哥伦布编码原理介绍及实现
- How to run a estimaton
- input-text
- ImportError : No module named graphics
- 企业 IT 架构转型之道 阿里巴巴中台战略思想与架构实战
- 怎样选择图纸加密软件?
- 用户登录页面以及后台方法、拦截器
- rest-assured一些使用心得
- matlab抠图数据,MATLAB抠图
- coco人体姿态估计标注软件
- 海思3559AV100 HiSysLink 之 IPCMSG
- 微头条自媒体常见领域,好创作,快速实现自媒体变现
- Franka Emika Panda机械臂规划路径时,rviz中手爪显示碰撞
- 千万别在老家买房了,因为那儿通高铁
- IO_FILE hack FSOP
- 英语单词词性顺口溜_英语词性修饰关系顺口溜
- 【元胞自动机】元胞自动机交通事故通行【含Matlab源码 1345期】
- linux安装mysql时使用临时密码登录不进去mysql: [Warning] Using a password on the command line interface can be insec
- ie6 兼容整理《一》
- 并发编程(进程、线程、协程)