带你学 Redis: 基本命令 String 操作(三)
前言
Redis 常用的数据结构有: String (字符串)、 List(列表)、Set(集合)、HashMap(哈希)、Sorted sets(有序集合)。不常用的有:Bitmaps(位图)、Hyperloglogs 、Geospatial。本文主要介绍如何Redis 中 String 的操作介绍 。
Redis 所有的数据结构和Java 中的HashMap 一样key 是唯一的并且这个key是一个字符串,然后通过唯一 key 值来获取
value 数据。而我们所说的 string(字符串)、 list(列表)、set(集合)、hashmap(哈希)、sorted
sets(有序集合) 等说的是value 结构的差异。
String 命令操作介绍
字符串类型是Redis中最为基础的数据存储类型,它是二进制安全的字符串,这就意味着它可以接受任何格式的数据。在Redis中字符串类型的value最多可以容纳的数据长度是512M
关于string 内存分配大致原理如下:
Redis 的字符串是动态字符串,是可以修改的字符串,内部结构实现上类似于 Java 的
ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配,如图中所示,内部为当前字符串实际分配的空间 capacity 一般要高于实际字符串长度 len。当字符串长度小于1M 时,扩容都是加倍现有的空间,如果超过 1M,扩容时一次只会多扩 1M 的空间。需要注意的是字符串最大长度为 512M。引用自:掘金小册【Redis 深度历险:核心原理与应用实践】
Docs命令操作
set
key value
向指定的key中添加 string 的value 返回ok,如果有则覆盖。
> SET mykey "Hello"
OK
> GET mykey
"Hello"
get
key
获取指定key的value值,返回值是string 的 value。
> SET mykey "Hello"
OK
> GET mykey
"Hello"
append
key value
向指定的key中value内容进行追加 返回值是 value 字符串的长度。
> APPEND mykey "Hello"
(integer) 5
> APPEND mykey " World"
(integer) 11
> GET mykey
"Hello World"
strlen
key
获取指定key中value字符串的长度
> SET mykey "Hello world"
OK
> STRLEN mykey
(integer) 11
> STRLEN nonexisting
(integer) 0
exists
key
判断指定 key 是否存在,如果存在返回 1 ,如果不存在返回 0。
> EXISTS mykey
(integer) 0
> set mykey "Hello"
OK
> EXISTS mykey
1
incr
key
对指定的 key 字符串进行递增1 操作,返回值递增后的值。value默认为整数字符串。
>exists personcount
0
>incr personcount
1
>get personcount
1
incrby
key value
对是整数的字符串递增指定增加多少的操作,返回值递增后的值。
> SET mykey "10"
OK
> INCRBY mykey 5
(integer) 15
redis>
decr
key
对指定的 key 字符串进行递减1 操作,返回值递减后的值。value默认为整数字符串。
> SET mykey "10"
OK
> DECR mykey
(integer) 9
decrby
key value
对是整数的字符串递增指定增加多少的操作,返回值递增后的值。
> SET mykey "10"
OK
> DECRBY mykey 3
(integer) 7
setex
key seconds value
原子性完成两个操作,一是设置该Key的值为指定字符串,同时设置该Key在Redis服务器中的存活时间(秒数)。
> SETEX mykey 10 "Hello"
OK
> TTL mykey
(integer) 10
> GET mykey
"Hello"
setnx
key value
如果指定的 key 不存在,则设定该 key 持有指定字符串 value,此时其效果等价于 set 命令。相反,如果该Key已经存在,该命令将不做任何操作并返回。 1表示设置成功,否则返回0。
> SETNX mykey "Hello"
(integer) 1
> SETNX mykey "World"
(integer) 0
> GET mykey
"Hello"
getset
key value
原子性的设置 key 的新 value,同时返回该 key 原有值。和 get 命令一样,该命令也只能处理string类型的 value,否则 Redis将给出相关的错误信息。如果该 key 之前并不存在,则返回nil。
> SET mykey "Hello"
OK
> GETSET mykey "World"
"Hello"
> GET mykey
"World"
setrange
key, offset newValue
向key 中的 vlaue值中的指定角标中替换为新的 value, 返回值是替换后的字符串的长度
> SET key1 "Hello World"
OK
> SETRANGE key1 6 "Redis"
(integer) 11
> GET key1
"Hello Redis"
getrange
key start end
获取指定 key 中 value 字符串从 start 到 end 角标的字符串的内容,返回值是截取字符串的内容。
> SET mykey "This is a string"
OK
> GETRANGE mykey 0 3
"This"
> GETRANGE mykey -3 -1
"ing"
> GETRANGE mykey 0 -1
"This is a string"
> GETRANGE mykey 10 100
"string"
mset
key value key2 value2 … …
该命令原子性的完成参数中所有 key/value 的设置操作,其具体行为可以看成是多次迭代执行 set 命令。 该命令不会失败,始终返回值总是 string字符串 OK
> MSET key1 "Hello" key2 "World"
OK
> GET key1
"Hello"
> GET key2
"World"
>
mget
key key2 … …
返回所有指定keys 的 values 的值,如果其中某个key不存在,或者其值不为string类型,该key的 value将返回nil。
> SET key1 "Hello"
OK
> SET key2 "World"
OK
> MGET key1 key2 nonexisting
1) "Hello"
2) "World"
3) (nil)
msetnx
key value key2 value2 … …
该命令原子性的完成参数中所有 key value的设置操作,其具体行为可以看成是多次迭代执行 setnx 命令。1表示所有key 都设置成功,0 则表示没有任何 key 被修改。
> MSETNX key1 "Hello" key2 "there"
(integer) 1
> MSETNX key2 "there" key3 "world"
(integer) 0
> MGET key1 key2 key3
1) "Hello"
2) "there"
3) (nil)
keys
key
该命令用于查询 执行名称的key 返回key的名称列表。keys * 表示查询所有的 key的列表。 key a * 表示查询以a为前缀的所有的key。
> keys *
1) a
2) mykey
3) personcount>keys mykey
1) mykey>keys mykey*
1) mykey
del
key
删除指定的 key 名称的的key-value 信息,返回删除的个数。
> keys *
1) a
2) mykey
3) personcount> del a
1> keys *
1) mykey
2) personcount> keys *
1) mykey
2) personcount
>del mykey personcount
2>keys *
>
Java 客户端操作 Redis
Jedis 版本:
通过 Jedis客户端连接Redis 的代码请参考:玩转 SpringBoot 2.x 之 快速集成 Jedis客户端(普通版)
RedisTemplate 版本:
通过 Spring 提供 RedisTemplate 连接Redis 的代码请参考:玩转 SpringBoot 2.x 之 RedisTemplate 操作
小结
本文尽可能把Docs 命令下 String 操作介绍了一下,并没有太多的去介绍 Java 客户端的操作。因为 Java 客户端的操作实际上也是执行 最为基础的 Docs命令。具体 Java 客户端操作就交给您去探索了。
带你学 Redis: 基本命令 String 操作(三)相关推荐
- 带你学 Redis:Redis简介(一)
Redis 是什么? Redis 是一个高性能 key-value 的非关系型内存数据库,这里 key-value 可以理解成Java中的 Map.Redis 的 value 支持各种数据结构类型,不 ...
- 带你学 Redis:Redis安装(二)
Windows 安装 请参考 Windows 安装 Redis 教程 Docker 安装 安装 Docker 可以直接去 https://hub.docker.com/ 下载安装包进行下载安装,前提是 ...
- [元带你学NVMe] 设备自测试操作(NVMe Device Self-test Operations) 详解与实战
声明 主页:元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言. 个人辛苦整理,付费内容,禁止转载. 内容摘要 全文 6700 字, 主要内容 目录 前言 1. 概念与介绍 2. Devi ...
- Carson带你学Android:这是一份全面详细的属性动画学习攻略!
前言 属性动画的使用 是 Android 开发中常用的知识 本文将献上一份全面 & 详细的属性动画学习指南,将详细介绍属性动画的所有内容,包括:意义.作用.应用场景.功原理 & 具体使 ...
- Carson带你学Android:这是一份全面详细的动画学习指南
前言 动画的使用 是 Android 开发中常用的知识 可是动画的种类繁多.使用复杂,每当需要 采用自定义动画 实现 复杂的动画效果时,很多开发者就显得束手无策 本文将献上一份Android动画的全面 ...
- 跟我一起学Redis之看完这篇比常人多会三种类型实战(又搞了几个小时)
前言 对于Redis而言,很多小伙伴只关注其关键的五大基础类型:string.hash.list.set.sorted set(有序集合),其实还有三种特殊类型在很多应用场景也比较适合使用,分别是:b ...
- 带上问题来学redis,看到不吃亏(什么是redis?缓存问题、数据一致性、redis配置文件汉化版)
愿打开此篇能对你有帮助. 文章目录 redis是什么? 为什么说redis是缓存中间件?? redis.conf翻译与配置 redis VS memcache 缓存穿透 什么是缓存穿透? 缓存穿透的危 ...
- java获取list redis_【快学springboot】14.操作redis之list
前言 之前讲解了springboot(StringRedisTemplate)操作redis的string数据结构,这篇文章将会讲解list数据结构 list数据结构具有的操作 下图列出了redis ...
- 带你掌握Redis数据类型:string和Hash
摘要:Redis中有五大数据类型,分别是String.List.Set.Hash和Zset. 本文分享自华为云社区<Redis的string类型常用命令解析>,作者:灰小猿 . 先问大家一 ...
最新文章
- linux运维第二讲
- [QUICK UI] 有哪些目前流行的前端框架
- web.xml配置解释
- lq分解的matlab语言,MATLAB-语言及其应用.ppt
- IntelliJ IDEA 中使用 Lambok (注解无效问题的解决)
- 【转】win10安装caffe教程
- 计算机仿真课程的心得体会,数学建模心得体会
- 华为浏览器工具箱 html修改,华为电子文档浏览器(HedEx Lite)
- 天猫服饰新推“良品臻选”,请了一群挑剔的女人给服装“挑刺”
- blockly -- 颜色(Block colour)
- python使用requests库爬取淘宝评论
- 【python】牛客竞赛语法入门班选择结构习题 python解法
- 全国(大学)高等教育各学科视频教学全集
- 判断机型,支持最新设备(iPhone SE Gen2 和 iPad Pro 11 Gen2、iPad Pro 12.9 Gen4)
- Booksir路线:先成材,再成功,警察到书生的传奇(转载)
- 顶级科学家是哲学家,顶级investor是哲学家
- 【KITTI】KITTI数据集简介(三) — 图像数据image_2
- iOS 常用第三方库及插件
- 编解码版税royalty和授权费license fee
- 视觉惯性单目SLAM (二) 算法基础知识
热门文章
- mysql导出kml_谷歌地图如何导出kml文件 导出kml文件教程
- atlas mysql 安装_atlas中间件安装配置
- Unity超基础学习笔记(一)
- OpenShift 4 之 GitOps(4)用ArgoCD向Multi-Cluster发布应用
- C#中的深度学习:预处理硬币检测数据集
- python与专业相结合应用案例_Office高级应用与Python综合案例教程(普通高等教育十三五规划教材)...
- uni-app获取当前具体日期时间并将其格式化
- 如何让apache支持php,Apache怎么才能支持PHP程序?
- 电脑表格日期怎么修改原有日期_一些让你惊呆的电脑办公小技能
- c语言time.h时区不对,用C语言修改系统时区,发现一堆问题,请各位大侠不吝赐教。...