前言

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 操作(三)相关推荐

  1. 带你学 Redis:Redis简介(一)

    Redis 是什么? Redis 是一个高性能 key-value 的非关系型内存数据库,这里 key-value 可以理解成Java中的 Map.Redis 的 value 支持各种数据结构类型,不 ...

  2. 带你学 Redis:Redis安装(二)

    Windows 安装 请参考 Windows 安装 Redis 教程 Docker 安装 安装 Docker 可以直接去 https://hub.docker.com/ 下载安装包进行下载安装,前提是 ...

  3. [元带你学NVMe] 设备自测试操作(NVMe Device Self-test Operations) 详解与实战

    声明 主页:元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言. 个人辛苦整理,付费内容,禁止转载. 内容摘要 全文 6700 字, 主要内容 目录 前言 1. 概念与介绍 2. Devi ...

  4. Carson带你学Android:这是一份全面详细的属性动画学习攻略!

    前言 属性动画的使用 是 Android 开发中常用的知识 本文将献上一份全面 & 详细的属性动画学习指南,将详细介绍属性动画的所有内容,包括:意义.作用.应用场景.功原理 & 具体使 ...

  5. Carson带你学Android:这是一份全面详细的动画学习指南

    前言 动画的使用 是 Android 开发中常用的知识 可是动画的种类繁多.使用复杂,每当需要 采用自定义动画 实现 复杂的动画效果时,很多开发者就显得束手无策 本文将献上一份Android动画的全面 ...

  6. 跟我一起学Redis之看完这篇比常人多会三种类型实战(又搞了几个小时)

    前言 对于Redis而言,很多小伙伴只关注其关键的五大基础类型:string.hash.list.set.sorted set(有序集合),其实还有三种特殊类型在很多应用场景也比较适合使用,分别是:b ...

  7. 带上问题来学redis,看到不吃亏(什么是redis?缓存问题、数据一致性、redis配置文件汉化版)

    愿打开此篇能对你有帮助. 文章目录 redis是什么? 为什么说redis是缓存中间件?? redis.conf翻译与配置 redis VS memcache 缓存穿透 什么是缓存穿透? 缓存穿透的危 ...

  8. java获取list redis_【快学springboot】14.操作redis之list

    前言 之前讲解了springboot(StringRedisTemplate)操作redis的string数据结构,这篇文章将会讲解list数据结构 list数据结构具有的操作 下图列出了redis ...

  9. 带你掌握Redis数据类型:string和Hash

    摘要:Redis中有五大数据类型,分别是String.List.Set.Hash和Zset. 本文分享自华为云社区<Redis的string类型常用命令解析>,作者:灰小猿 . 先问大家一 ...

最新文章

  1. linux运维第二讲
  2. [QUICK UI] 有哪些目前流行的前端框架
  3. web.xml配置解释
  4. lq分解的matlab语言,MATLAB-语言及其应用.ppt
  5. IntelliJ IDEA 中使用 Lambok (注解无效问题的解决)
  6. 【转】win10安装caffe教程
  7. 计算机仿真课程的心得体会,数学建模心得体会
  8. 华为浏览器工具箱 html修改,华为电子文档浏览器(HedEx Lite)
  9. 天猫服饰新推“良品臻选”,请了一群挑剔的女人给服装“挑刺”
  10. blockly -- 颜色(Block colour)
  11. python使用requests库爬取淘宝评论
  12. 【python】牛客竞赛语法入门班选择结构习题 python解法
  13. 全国(大学)高等教育各学科视频教学全集
  14. 判断机型,支持最新设备(iPhone SE Gen2 和 iPad Pro 11 Gen2、iPad Pro 12.9 Gen4)
  15. Booksir路线:先成材,再成功,警察到书生的传奇(转载)
  16. 顶级科学家是哲学家,顶级investor是哲学家
  17. 【KITTI】KITTI数据集简介(三) — 图像数据image_2
  18. iOS 常用第三方库及插件
  19. 编解码版税royalty和授权费license fee
  20. 视觉惯性单目SLAM (二) 算法基础知识

热门文章

  1. mysql导出kml_谷歌地图如何导出kml文件 导出kml文件教程
  2. atlas mysql 安装_atlas中间件安装配置
  3. Unity超基础学习笔记(一)
  4. OpenShift 4 之 GitOps(4)用ArgoCD向Multi-Cluster发布应用
  5. C#中的深度学习:预处理硬币检测数据集
  6. python与专业相结合应用案例_Office高级应用与Python综合案例教程(普通高等教育十三五规划教材)...
  7. uni-app获取当前具体日期时间并将其格式化
  8. 如何让apache支持php,Apache怎么才能支持PHP程序?
  9. 电脑表格日期怎么修改原有日期_一些让你惊呆的电脑办公小技能
  10. c语言time.h时区不对,用C语言修改系统时区,发现一堆问题,请各位大侠不吝赐教。...