Redis 从入门到精通之Redis字符串操作

本文涉及的产品
性能测试 PTS,5000VUM额度
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: Redis字符串操作命令自增:INCR key(key对应的值必须是整数类型)自减:DECR key(key对应的值必须是整数类型)自增指定的值:INCRBY key increment自减指定的值:DECRBY key decrement追加字符串:APPEND key value截取字符串:GETRANGE key start end改写字符串:SETRANGE key offset value返回子字符串:SUBSTR key start end(该命令已被废弃,建议使用GETRANGE命令代替)

1.Redis字符串操作的常用命令:

  • 设置key对应的值为string类型的value:SET key value
  • 获取key对应的string值:GET key
  • 增减操作:
    • 自增:INCR key(key对应的值必须是整数类型)
    • 自减:DECR key(key对应的值必须是整数类型)
    • 自增指定的值:INCRBY key increment
    • 自减指定的值:DECRBY key decrement
  • 追加字符串:APPEND key value
  • 截取字符串:GETRANGE key start end
  • 改写字符串:SETRANGE key offset value
  • 返回子字符串:SUBSTR key start end(该命令已被废弃,建议使用GETRANGE命令代替)
  • 中文字符串处理:Redis默认支持UTF-8编码,直接存储即可
  • 取指定key的value值的长度:STRLEN key
  • 位操作:
    • 设置指定偏移量上的位值:SETBIT key offset value
    • 获取指定偏移量上的位值:GETBIT key offset
    • 对多个key进行位运算:BITOP operation destkey key [key ...]
    • 获取二进制字符串中第一个或最后一个1的位置:BITPOS key bit [start] [end]

以上命令并非全部,Redis还提供了很多其他的字符串操作命令。

2.Java代码示例

2.1 Jedis代码示例

import redis.clients.jedis.Jedis;

public class JedisExample {
   
    private static final String HOST = "localhost";
    private static final int PORT = 6379;

    public static void main(String[] args) {
   
        // 创建Jedis实例
        Jedis jedis = new Jedis(HOST, PORT);

        // 设置key-value对
        String result = jedis.set("foo", "bar");
        // 打印结果:OK
        System.out.println(result);

        // 获取key对应的value
        result = jedis.get("foo");
        // 打印结果:bar
        System.out.println(result);

        // 对计数器进行自增和自减操作
        jedis.incr("counter");
        jedis.decr("counter");

        // 拼接字符串
        result = jedis.append("foo", "bar");
        // 打印结果:barbar
        System.out.println(result);

        // 获取字符串中指定范围的子串
        result = jedis.getrange("foo", 0, 2);
        // 打印结果:bar
        System.out.println(result);

        // 修改字符串中指定位置的字符
        jedis.setrange("foo", 1, "ar");
        // 获取修改后的字符串
        result = jedis.get("foo");
        // 打印结果:barbar
        System.out.println(result);

        // 获取字符串的子串
        result = jedis.substr("foo", 1, 2);
        // 打印结果:ar
        System.out.println(result);

        // 获取字符串的长度
        result = jedis.strlen("foo");
        // 打印结果:6
        System.out.println(result);

        // 关闭Jedis实例
        jedis.close();
    }
}

2.1 RedisTemplate代码

import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;

public class RedisTemplateExample {
   
    private static final String HOST = "localhost";
    private static final int PORT = 6379;

    public static void main(String[] args) {
   
        // 创建RedisTemplate实例
        RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(new JedisConnectionFactory(new RedisStandaloneConfiguration(HOST, PORT)));
        redisTemplate.afterPropertiesSet();
        RedisTemplateExample example = new RedisTemplateExample(redisTemplate);

        // 设置key-value对
        example.set("foo", "bar");
        // 获取key对应的value
        String result = example.get("foo");
        // 打印结果:bar
        System.out.println(result);

        // 对计数器进行自增和自减操作
        example.incr("counter");
        example.decr("counter");

        // 拼接字符串
        example.append("foo", "bar");
        // 获取字符串中指定范围的子串
        result = example.getrange("foo", 0, 2);
        // 打印结果:bar
        System.out.println(result);

        // 修改字符串中指定位置的字符
        example.setrange("foo", 1, "ar");
        // 获取修改后的字符串
        result = example.get("foo");
        // 打印结果:barbar
        System.out.println(result);

        // 获取字符串的子串
        result = example.substr("foo", 1, 2);
        // 打印结果:ar
        System.out.println(result);

        // 获取字符串的长度
        result = example.strlen("foo");
        // 打印结果:6
        System.out.println(result);
    }

    private RedisTemplate<String, String> redisTemplate;

    public RedisTemplateExample(RedisTemplate<String, String> redisTemplate) {
   
        this.redisTemplate = redisTemplate;
    }

    public void set(String key, String value) {
   
        // 通过opsForValue()方法获取ValueOperations实例,然后调用set()方法设置key-value对
        redisTemplate.opsForValue().set(key, value);
    }

    public String get(String key) {
   
        // 通过opsForValue()方法获取ValueOperations实例,然后调用get()方法获取key对应的value
        return redisTemplate.opsForValue().get(key);
    }

    public Long incr(String key) {
   
        // 通过opsForValue()方法获取ValueOperations实例,然后调用increment()方法对计数器进行自增操作,返回自增后的值
        return redisTemplate.opsForValue().increment(key);
    }

    public Long decr(String key) {
   
        // 通过opsForValue()方法获取ValueOperations实例,然后调用decrement()方法对计数器进行自减操作,返回自减后的值
        return redisTemplate.opsForValue().decrement(key);
    }

    public Integer append(String key, String value) {
   
        // 通过opsForValue()方法获取ValueOperations实例,然后调用append()方法拼接字符串,返回拼接后字符串的长度
        return redisTemplate.opsForValue().append(key, value);
    }

    public String getrange(String key, long start, long end) {
   
        // 通过opsForValue()方法获取ValueOperations实例,然后调用get()方法获取字符串中指定范围的子串
        return redisTemplate.opsForValue().get(key, start, end);
    }

    public void setrange(String key, long offset, String value) {
   
        // 通过opsForValue()方法获取ValueOperations实例,然后调用set()方法修改字符串中指定位置的字符
        redisTemplate.opsForValue().set(key, value, offset);
    }

    public String substr(String key, long start, long end) {
   
        // 通过opsForValue()方法获取ValueOperations实例,然后调用get()方法获取字符串的子串
        return redisTemplate.opsForValue().get(key, start, end);
    }

    public Long strlen(String key) {
   
        // 通过opsForValue()方法获取ValueOperations实例,然后调用size()方法获取字符串的长度
        return redisTemplate.opsForValue().size(key);
    }
}

注意:在使用RedisTemplate示例时,需要添加相关依赖。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
3月前
|
存储 缓存 NoSQL
redis数据结构-字符串
redis数据结构-字符串
38 1
|
1月前
|
缓存 NoSQL Java
springboot的缓存和redis缓存,入门级别教程
本文介绍了Spring Boot中的缓存机制,包括使用默认的JVM缓存和集成Redis缓存,以及如何配置和使用缓存来提高应用程序性能。
98 1
springboot的缓存和redis缓存,入门级别教程
|
30天前
|
NoSQL Redis
Redis 字符串(String)
10月更文挑战第16天
37 4
|
1月前
|
存储 消息中间件 NoSQL
Redis 入门 - C#.NET Core客户端库六种选择
Redis 入门 - C#.NET Core客户端库六种选择
60 8
|
2月前
|
存储 缓存 NoSQL
3)深度解密 Redis 的字符串
3)深度解密 Redis 的字符串
32 1
|
3月前
|
NoSQL 安全 Java
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
这篇文章深入探讨了Redis中的String数据类型,包括键操作的命令、String类型的命令使用,以及String在Redis中的内部数据结构实现。
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
|
3月前
|
NoSQL 关系型数据库 Redis
Redis6入门到实战------ 九、10. Redis_事务_锁机制_秒杀
这篇文章深入探讨了Redis事务的概念、命令使用、错误处理机制以及乐观锁和悲观锁的应用,并通过WATCH/UNWATCH命令展示了事务中的锁机制。
Redis6入门到实战------ 九、10. Redis_事务_锁机制_秒杀
|
3月前
|
NoSQL Java Redis
Redis6入门到实战------ 八、Redis与Spring Boot整合
这篇文章详细介绍了如何在Spring Boot项目中整合Redis,包括在`pom.xml`中添加依赖、配置`application.properties`文件、创建配置类以及编写测试类来验证Redis的连接和基本操作。
Redis6入门到实战------ 八、Redis与Spring Boot整合
|
3月前
|
NoSQL Java Linux
Redis6入门到实战------ 六、Redis_Jedis_测试
这篇文章介绍了如何使用Jedis客户端连接Redis,并进行基本的数据类型操作测试,包括字符串、列表、集合、哈希和有序集合的相关API使用示例。
Redis6入门到实战------ 六、Redis_Jedis_测试
|
3月前
|
C# 开发者 UED
WPF开发者必备秘籍:深度解析文件对话框使用技巧,打开与保存文件原来如此简单!
【8月更文挑战第31天】在WPF应用开发中,文件操作是常见需求。本文详细介绍了如何利用`Microsoft.Win32`命名空间下的`OpenFileDialog`和`SaveFileDialog`类来正确实现文件打开与保存功能。通过示例代码展示了如何设置文件过滤器、初始目录等属性,并使用对话框进行文件读写操作。正确使用文件对话框能显著提升用户体验,使应用更友好易用。
81 0