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示例时,需要添加相关依赖。