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

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 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
目录
相关文章
|
7天前
|
存储 NoSQL Redis
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
13 1
|
1月前
|
机器学习/深度学习 XML NoSQL
【Redis】 String 字符串类型常见命令
【Redis】 String 字符串类型常见命令
|
21天前
|
存储 缓存 NoSQL
rodert单排学习redis入门【黑铁】2
rodert单排学习redis入门【黑铁】
29 0
|
21天前
|
存储 缓存 NoSQL
rodert单排学习redis入门【黑铁】1
rodert单排学习redis入门【黑铁】
18 0
|
1月前
|
NoSQL Java Redis
【Redis】 Java操作Redis客户端命令——基础操作与字符串操作
【Redis】 Java操作Redis客户端命令——基础操作与字符串操作
|
2月前
|
缓存 NoSQL Java
【Redis系列笔记】Redis入门
本文介绍了Redis常用命令,以及SpringBoot集成Spring Data Redis和Spring Cache。Spring Data Redis 提供了对 Redis 的操作方法,而 Spring Cache 则提供了基于注解的缓存功能,可以方便地将方法的返回值缓存到 Redis 中,以提高性能和减少对数据源的访问次数。这样的集成可以帮助开发者更便捷地利用 Redis 来管理应用程序的数据和缓存。
141 4
|
2月前
|
存储 NoSQL 关系型数据库
Redis -- String 字符串, 计数命令,字符串操作
Redis -- String 字符串, 计数命令,字符串操作
27 0
|
2月前
|
存储 缓存 NoSQL
Redis入门到通关之Redis内存淘汰(内存过期)策略
Redis入门到通关之Redis内存淘汰(内存过期)策略
53 3
|
2月前
|
存储 NoSQL Linux
Redis入门到通关之多路复用详解
Redis入门到通关之多路复用详解
32 1
|
2月前
|
存储 NoSQL Linux
Redis入门到通关之Redis5种网络模型详解
Redis入门到通关之Redis5种网络模型详解
48 1