Redis学习笔记之三:String类型

Redis学习笔记3:五大数据类型String、List、Set、Hash、Zset)和三种特殊数据类型(geospatial、Hyperloglog、Bitmaps) 介绍: Redis是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件MQ,它支持多种类型的数据结构,如字符串( strings ) ,散列(hashes ) ,列表( lists ) ,集合(sets ) ,有序集合(sorted sets)与范围查询,bitmaps, hyperloglogs和地理空间( geospatial )索引半径查询. Redis内置了复制( replication ) , LUA脚本(Lua scripting ) , L... 阅读详情

         

    String类型是Redis最重要的数据类型,其他4种类型都是以String作为基础的。Redis为操纵String类型的数据提供了许多指令,指令数量算是5种类型最多的了。虽然Redis提供的String指令没有Java等编程语言中String的API丰富,但在我看来,其实各有千秋,你可以使用一个简单的指令完成Java中需要10行左右的代码才能完成的事。但String类型存储是有限制的,Value最大大小为500MB。

    打开Redis,开始练习吧!

    1、SET/GET. SET指令用于设置Key-Value,而GET用于获取Key对应的Value。需要注意的是,SET/GET命令只能用于String类型,用于其他类型会报错,下面的其他命令也是如此。演示如下:其中LPUSH是操作List类型的命令,这个会在后面讲到。


    这儿值得注意的是GET命令,如果在服务器取值,Key不存在的情况返回是(nil),而使用Java的Client取值,Key不存在,返回的是null。

    2、STRLEN.获取字符串的长度应该是最平常不过的需求了,STRLEN用于获取指定Key的Value的长度。


    可以看到不存在的Key会返回0,但有可能Key对应的Value长度本身就为0.

    3、APPEND.这个指令用于向字符串尾部追加字符串。这个指令比较有趣,看下图演示:


    追加成功会返回追加后的字符串长度,而如果追加的Key不存在,那这个指令相当于SET指令,但会返回长度。

    4、MSET/MGET 这两个指令可以看成Multipart SET以及Multipart GET,意思就是可以一次性设置多个或获取多个,与Mysql的INSERT的Values一致。但MSET指令注意的是,Key—Value必须成对出现,否则不会执行。演示如下图:


    5、位操作,计算机从被发明直到现在,依旧只认识0和1。而Redis提供了命令可以对String类型直接进行二进制操作。

    SETBIT 与GETBIT,看下面演示吧:

    ①、通过set number 2 设置number便于以后操作。这儿2的二进制表示10,补全0位就是00000010.

    ②、通过SETBIT number 6 0指令将number二进制的第6位设置为0,上面的二进制从左往右数第6位,下标从0开始。

    ③、通过get number查看结果。


    setbit返回值是设置该位置的值。可能有的设置number为10却没有达到应有的效果,例如下面这个,10的二进制为00001010,按理说应该得到的结果为11


    可结果依旧为10,这是因为字符串10是两个字符组成,1和0,所以把10用两个字节存储,Redis中10实际是下面的结构。

00000001 00000000

    修改7位置为1,当然结果不会改变。这儿还有注意的是中文是使用三个字节存储。


    所以在Redis里面没有中文,但使用程序拉取数据显示时会有16进制转为中文。

    GETBIT可以返回指定位置的值。如果超出了范围则为0.


    BITCOUNT指令返回二进制下1的个数。可以指定范围。如果表示该String的字节数大于1,如上面的中字,则后面范围则是字节数的范围,比如下面这个:


    可以看到第一个字节的1个数为4,对应E4的二进制11100100。

    而关于Redis的二进制计算还有一个坑,什么坑?前面说到了10是被分为两个字节存储的,没错。但并不是

00000001 00000000
    而是这种形式:

00110001 00110000
    所以下面演示结果是3:


   这种形式只有数字会这样,字母以及汉字等都是正常的。留个坑,后面再来解决。

   BITOP 进行二进制运算,支持运算符AND OR XOR NOT,使用格式如下


   会依次将number1 与number2进行相应运算,再与number进行运算,最后将结果保存到result中。

   6、INCR指令,increment的前4个字母,将字符串形式的整数+1 ,如果Key不存在,进行了set操作.

      DECR指令,与INCR相反,将字符串形式的整数值-1,如果Key不存在,进行了set操作.



    与之还有相对应的INCRBY 和DECRBY,增加多少值,减少多少值。INCR可以写作INCRBY key 1, 也可以写作DECRBY key -1.同理DECR可以写作INCRBY key -1,也可以写作DECRBY key 1


    还有一个INCRBYFLOAT指令增加浮点数,但没有DECRBYFLOAT指令。如果Key不存在返回-1.    

    最最最重要的是,第6点包含的指令只对字符串形式的整数有效。当然第5点包含的指令也基本是用不到。

Redis的Java客户端

    测试代码如下:
package org.yamikaze.redis.test;

import redis.clients.jedis.Jedis;

import java.util.List;

/**
 * 测试String类型
 * @author yamikaze
 */
public class TestString {

    public static void main(String[] args) {
        Jedis client = MyJedisFactory.defaultJedis();

        String nameKey = "username";
        String nameValue = "yamikaze";

        String birthKey = "birth";
        String birthValue = "1995";

        String sexKey = "sex";
        String sexValue = "man";

        /**
         * 对应MSET
         */
        String setResult = client.mset(nameKey, nameValue, birthKey, birthValue,
                sexKey, sexValue);
        System.out.println("MSET result : " + setResult);

        /**
         * 对应MGET
         */
        List<String> values = client.mget(nameKey, birthKey, "notExistKey");
        if(values != null) {
            //注意了size为3,不存在的Key返回为null
            System.out.println(values.size());
            System.out.println(values.get(2));
        }

        /**
         * 对应STRLEN
         */
        long nameLength = client.strlen(nameKey);
        System.out.println(nameLength);

        /**
         * 对应APPEND,返回的是向尾部增加字符串之后的长度
         */
        long appendResult = client.append(nameKey, "1234");
        System.out.println(appendResult);

        /**
         * 对应BITCOUNT
         */
        long bitCount = client.bitcount(nameKey, 0, 100);
        System.out.println(bitCount);

        /**
         * 对应INCR
         */
        String value = "1996";
        Long incr = client.incr(birthKey);
        System.out.println(value.equals(incr.toString()));

        Long decr = client.decrBy(birthKey, 1);
        System.out.println(birthValue.equals(decr.toString()));
    }
}

参考资料

    《Redis入门指南》








地瓜机器人RDK Studio使用入门教程 不知道大家在使用AI开发板的时候有没有遇到过板子官方镜像占据空间大难以保存,想要的时候找不到?官方示例项目久而久之便难以找寻?首次登陆开发板连接网络还需要准备显示器键盘鼠标外设繁杂?…为了解决平时开发过程中遇到的种种不便利问题,地瓜机器人创新的推出了RDK Studio这一官方开发者软件,使智能机器人开发迎来新纪元!通过这一软件极大降低了机器人的开发门槛,哪怕是零基础的用户亦可轻松上手RDK系列板卡! 阅读详情

相关推荐

redis学习笔记redis常用命令

redis学习笔记redis常用命令

一行真人 337

struts2标签之select标签

1 struts2中的select标签为下拉列表标签。该标签的list属性可以写死也可以从后台得到。 如: 解释: name属性为标签的name值, list属性为该标签的列表。上述是写死:list="#{0:'男',1:'女'}",key为整形,value为字符型 listKey属性为该list属性中的key listValue属性为该list属性中的value heade

xclsky的博客 1407

AF自动对焦 CDAF PDAF

前言 主流的AF: CDAF, PDAF, laser assist AF(这个只是辅助,在微距或者拍摄纹理不明显的场景下好用)。 1.cdaf原理 CDAF的大致原理就是检测图像锐度或者等价于锐度的参数,不断推动马达寻找最清晰点实现合焦或者对焦。如下图: 缺点:对焦准确,速度慢,由于camera帧率,cpu处理速度,马达反映时间问题不能实时对焦运动物体。 2.pdaf原理 计算相位差,将相位差转换为相位差和af code的关系....

camerall 1万+

Struts2中checkboxlist标签——应用、实现换行

先来看看checkboxlist标签、都有些什么属性:             name-定义标签名,用于接收画面上选中的复选框,故应与Action里定义的属性一致,且多为数组;     list-定义集合变量,用于输出复选框到画面上,一般在Action里定义一个List或Map属性;     listKey-如果在Action里定义的是一个List,则往往会在List里定义一个B

xzmyzy的专栏 927

Agentic AI API安全架构实战:从工具封装到动态策略的纵深防御

在构建企业级AI应用时,API安全是确保数据流可控、权限清晰和调用链可追溯的核心基础。其原理在于通过分层架构和声明式策略,对AI智能体(Agent)与外部系统的交互进行系统化管控。这一设计的技术价值在于,它能将灵活的动态执行链(如RAG检索、CRM调用、支付接口串联)约束在确定性的安全边界内,有效防范数据泄露与越权访问。典型的应用场景包括销售数据分析、客户服务自动化等需要串联多个内部或第三方API的复杂任务流程。本文聚焦于Agentic AI场景,通过构建安全的工具代理层、集成ABAC动态策略与全方位审计,

weixin_34315485的博客 511

MySQL数据库创建sex字段设置男女约束

网上找这个的时候千篇一律的 CREATE TABLE t_user ( id INT(11) NOT NULL AUTO_INCREMENT, sex CHAR(2) default '男' CHECK (sex in('男','女')), PRIMARY KEY (id)); 然后建表的时候报错 Error 1067: Invalid default value for 'sex' S...

Minamiya_Natsuki的博客 4万+

JAVA-实现字符串的分割(身份证判断年龄)

JAVA-实现字符串的分割(身份证判断年龄) 目录JAVA-实现字符串的分割(身份证判断年龄)1.String类下的方法subString()2.判断性别3.年龄计算3.1.把身份证日期和规定的指定日期都变成毫秒3.2.多重if语句判断4.完整代码如下5.总结 1.String类下的方法subString() subString()方法有几个方法重载,我这里针对的介绍含有两个参数的subString()方法 下面以字符串“substring”举例 s u b s t r i n g 0 1

MrTreebook的博客 855

redis学习笔记01:String类型的实现SDS

看了《Redis设计与实现》第二章关于redis底层对于String类型的实现:SDS(Simple Dynamic String,简单动态字符串)的内容,在这里做一点简单的总结笔记。

stan_ko的博客 212

Redis学习笔记—数据类型:字符串(string

字符串是Redis最基础的数据结构。首先键是字符串类型,而且其他几种类型都是在字符串类型的基础上构建的。字符串类型的值实际可以是字符串(简单的字符串、复杂的字符串(例如JSON、XML))、数字(整数、浮点数),甚至是二进制(图片、音频、视频),但是值最大不能超过512MB。 设置值 set命令 set key value [ex seconds] [px milliseconds] [nx|xx] ex seconds:为键设置秒级过期时间 127.0.0.1:6379> set hello wo

aiguoba的博客 314

redisString字符串命令和内部编码

本文是作为String字符串命令和内部编码的学习笔记字符串类型redis最基本的数据类型redis中所有键的类型都是字符串类型,而且有其它几种数据结构都是在字符串类似基础上构建的(如列表,集合的元素类型都是字符串类型)。redis中的字符串,直接就是按照二进制数据的方式存储的(不会做任何编码转换),不仅仅可以存储文本数据,还可以存储整数,JSON,xml,二进制数据(图片,视频,音频)。

li209779的博客 1608

redis学习笔记

NoSQLRedis文件介绍在Linux上安装由于 Redis 由编写,安装 Redis 前需要先安装 C 语言环境。解压移动编译查看性能测试[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vpCEcxls-1667398205484)(C:\Users\huai66\AppData\Roaming\Typora\typora-user-images\image-20221102154823983.png)]10万个请求。

qq_55741761的博客 337

Redis学习笔记(一)

Redis 备注:个人学习笔记,是学习B站上的狂神说Java的课程摘录的笔记。 视频地址:https://www.bilibili.com/video/BV1S54y1R7SB B站up主:狂神说Java 学习描述: Nosql概述 NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。N

qq_31374621的博客 368

Redis五大数据类型和常用命令

首先,先来一段Redis官网的说明: Redis是一个开源的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如字符串( strings),散列( hashes),列表(lists) ,集合(sets),有序集合( sorted sets )与范围查询,bitmaps,hyperloglogs 和地理空间( geospatial)索引半径查询。Redis 内置了复制( replication) , LUA脚本( Luascripting),LRU驱动事件( LRU e

待起飞的程序猿的博客 304

Redis中五大数据类型和常用命令

Redis常见数据类型和相关命令

Yeee_F 591

redis初阶】string 类型

string 类型Redis 最基础的数据类型,关于字符串需要特别注意:1)首先 Redis 中所有的键的类型都是字符串类型,而且其他几种数据结构也都是在字符串类似基础上构建的,例如列表和集合的元素类型是字符串类型,所以字符串类型能为其他 4 种数据结构的学习奠定基础。2)其次,如图 2-7所示,字符串类型的值实际可以是字符串,包含一般格式的字符串或者类似JSON、XML 格式的字符串;数字,可以是整型或者浮点型;甚至是二进制流数据,例如图片、音频、视频等。

qq_52842680的博客 2869

Redis数据结构:String类型全面解析

Redis,作为一个开源的、内存中的数据结构存储系统,以其出色的性能和灵活的数据类型,广泛应用于缓存、消息队列、发布订阅系统等多种场景。在 Redis 的五种基本数据类型中, String 类型是最基本也是最常用的一种。它不仅可以存储字符串,还可以存储整数和浮点数,甚至可以执行原子操作,如自增和自减。这使得 RedisString 类型在实际应用中有着广泛的用途,从简单的键值对存储,到复杂的实时系统,都离不开 String 类型的支持。

栗筝i的博客 5785

RedisString类型介绍

value为String类型 相关命令,编码方式以及应用场景

yj20040627的博客 1644

Redisstring类型

讲解redis中的string类型,包括基本命令以及编码方式

博客网站 https://async-area.com 1637

Redis string类型&&hash类型

⼏乎所有的主流编程语⾔都提供了哈希(hash)类型,它们的叫法可能是哈希、字典、关联数组、映射。在 Redis 中,哈希类型是指值本⾝⼜是⼀个键值对结构,形如 key = "key",value = { {注意:哈希类型中的映射关系通常称为 field-value,⽤于区分 Redis 整体的键值对(key-value),注意这⾥的 value 是指 field 对应的值,不是键(key)对应的值,请注意 value 在不同上下⽂的作⽤。

m0_74099572的博客 1427

[Redis] Redis中的String类型

🏵️热门专栏:🧊 Java基本语法(97平均质量分)🍕 Collection与数据结构 (92平均质量分)🧀线程与网络(96平均质量分)🍭MySql数据库(93平均质量分)🍬算法(97平均质量分)🍃 Spring(97平均质量分)🎃Redis(96平均质量分)

无需多言 1499

艾默生冷冻产品选型软件 Select7.8_FULLDRAW.zip

艾默生冷冻产品选型软件

上一篇: Redis学习笔记之二:Redis的数据存储结构
下一篇: Redis学习笔记之四:列表类型
yamikaze
博客等级 码龄10年 79粉丝 36原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值