一、操作
1.启动redis服务器
./redis-server redis.conf
2.启动Redis的客户端
./redis-cli -p 6379
3.get、set操作:设置值和获取值
格式: set key value get key
set key1 v1
get key1
4.exists:判断key是否存在
格式: exists key
EXISTS key1
5.append:追加字符串,如果key不存在,相当于set命令
格式: append key value
APPEND key1 hello
6.strlen:获取字符串的长度
格式: strlen key
STRLEN key1
7.incr、decr操作:对value进行自增1和自减1操作
格式: incr key decr key
INCR view
DECR view
8.incrby decrby:设置加减的步长
格式: incrby key num decrby key num
incrby view 10
decrby view 5
9.getrange:获取给定范围的字符串值
格式: getrange key start stop
getrange k1 0 3
getrange k1 0 -1//截取全部
10.setrange:从指定位置开始替换字符串的值
格式: setrange key offset value
setrange k1 2
11.setex 、ttl操作:设置过期时间,查看剩余时间
格式: setex key seconds value
setex k2 30 v2
ttl k2
12.setnx:如果key不存在则设置,否则失败
格式: setnx key value
setnx k3 redis
setnx k3 111
13.mset mget:同时设置或者获取多个值
格式: mset key1 value1 key2 value2
mset k1 v1 k2 v2 k3 v3
mget k1 k2 k3
14.getset:先获取值,在设置值
格式: getset key value
getset k1 aaa
15.小结
String类似的使用场景:value除了是字符串也可以是数字!
(1)计数器
(2)统计多单位的数量
(3)对象缓存存储
二、底层原理
对于Redis的字符串,不是 C 语言中的字符串(即以空字符’\0’结尾的字符数组),它是自定义的数据结构SDS(simple dynamic string),并将 SDS 作为 Redis的默认字符串表示。
1.定义
struct sdshdr
{
//记录buf数组中已使用字节的数量
//等于 SDS 保存字符串的长度
int len;
//记录 buf 数组中未使用字节的数量
int free;
//字节数组,用于保存字符串
char buf[];
}
2.C语言字符串与SDS的区别
C语言字符串 | SDS |
---|---|
获取字符串长度的时间复杂度为O(n) | 获取字符串长度的时间复杂度为O(1) |
API是不安全的,可能造成缓冲区溢出 | API安全,不会造成缓冲区溢出 |
修改字符串长度n次必然需要执行n次内存重新分配 | 修改字符串长度n次最多需要执行n次内存重新分配 |
只能保存文本数据 | 可以保存文本数据和二进制数据 |
可以使用全部<string.h>中的库函数 | 可以使用部分<string.h>中的库函数 |