红色的新手之旅从Redis入门到实战(redis简单入门和实例)

2023-05-14 05:39:48 实战 入门 之旅

红色的新手之旅:从Redis入门到实战

Redis是一个快速、高效、可扩展的开源内存数据结构存储系统。它是一种NoSQL数据库,支持多种数据结构,如字符串、列表、哈希表、集合等,能够满足很多数据存储、缓存、计数器、消息队列等需求。下面将带您从零开始,一步步掌握Redis,并实战应用。

第一步:Redis安装

在Linux系统中,可以使用下面的命令安装Redis:

sudo apt-get install redis-server

在Windows系统中,需要到Redis官网下载并安装Redis。

安装完Redis后,使用下面的命令启动Redis:

redis-server

打开新的终端窗口,输入下面的命令进入Redis命令行:

redis-cli

第二步:Redis数据结构

Redis支持多种数据结构,包括字符串、列表、哈希表、集合、有序集合等。下面是一些常用的Redis命令:

1. 字符串:

set key value    // 设置key-value对
get key // 获取key对应的value
incr key // 对key对应的value自增1
decr key // 对key对应的value自减1
append key value // 在key对应的value后面追加新的字符串
mset key1 value1 key2 value2 ... // 同时设置多个key-value对
mget key1 key2 ... // 同时获取多个key对应的value

2. 列表:

lpush key value1 value2 ...    // 在key对应的列表左侧添加元素
rpush key value1 value2 ... // 在key对应的列表右侧添加元素
lrange key start end // 获取key对应的列表中start到end之间的元素
lpop key // 删除key对应的列表左侧的元素
rpop key // 删除key对应的列表右侧的元素

3. 哈希表:

hset key field value        // 设置key对应的哈希表中field对应的值为value
hget key field // 获取key对应的哈希表中field对应的值
hgetall key // 获取key对应的哈希表中所有field和value
hdel key field1 field2 ... // 删除key对应的哈希表中field1、field2等多个field

4. 集合:

sadd key member1 member2 ...   // 在key对应的集合中添加member1、member2等多个成员
smembers key // 获取key对应的集合中所有成员
srem key member1 member2 ... // 删除key对应的集合中member1、member2等多个成员

5. 有序集合:

zadd key score1 member1 score2 member2 ...   // 在key对应的有序集合中添加score1和对应的member1、score2和对应的member2等多个成员
zrange key start end withscores // 获取key对应的有序集合中排名在start到end之间的成员和它们的score

第三步:Redis持久化

Redis支持两种持久化方式:RDB和AOF。

1. RDB

RDB是将Redis数据库的数据以快照的方式保存到磁盘上,它可以在Redis启动时快速地将磁盘上的数据加载到内存中。RDB持久化的缺点是可能会有较短的数据丢失时间,因为Redis是定期将数据进行快照保存的。要使用RDB持久化,需要在Redis配置文件中将以下配置项取消注释并设置相应的值:

save 900 1       // 900秒内如果有1个键被改变,则保存快照
save 300 10 // 300秒内如果有10个键被改变,则保存快照
save 60 10000 // 60秒内如果有10000个键被改变,则保存快照
dbfilename dump.rdb // 快照文件的名字
dir /var/lib/redis/ // 快照文件的保存路径

2. AOF

AOF是将Redis数据库的每个操作以命令的形式保存到磁盘上,当Redis启动时会按照保存的命令对数据库进行恢复。AOF持久化的优点是可以保证较少的数据丢失(可以每秒钟进行一次AOF文件的保存),缺点是在AOF文件太大时,恢复数据的时间可能会比较长。要使用AOF持久化,需要在Redis配置文件中将以下配置项取消注释并设置相应的值:

appendonly yes              // 启用AOF持久化
appendfilename "appendonly.aof" // AOF文件的名字
appendfsync everysec // 每秒钟进行一次AOF文件的保存

第四步:Redis实战

1. 缓存

假设有一个需要频繁查询的数据库表,可以使用Redis缓存这个表的数据。

// 从数据库中获取数据
$sql = "SELECT * FROM user";
$result = mysqli_query($conn, $sql);
$user_list = mysqli_fetch_all($result, MYSQLI_ASSOC);

// 将数据存入Redis中
foreach ($user_list as $user) {
$redis->hset("user", $user['id'], json_encode($user));
}
// 从Redis中获取数据
$user_id = 1;
$user = $redis->hget("user", $user_id);
if ($user) {
echo json_decode($user);
} else {
// 从数据库中获取数据
}

2. 分布式锁

在分布式系统中,可能会存在多个进程同时对同一个资源进行操作的情况,这时需要使用分布式锁来保证资源在同一时间只被一个进程访问。

下面是一个使用Redis分布式锁的示例代码:

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

$lock_key = 'test_lock';
$lock_value = microtime(true) . rand(100000, 999999);
$lock_timeout = 10;

// 尝试获取锁
$acquired = $redis->set($lock_key, $lock_value, ['nx', 'ex' => $lock_timeout]);
if ($acquired) {
// 获取锁成功
// ...
// 释放锁
$redis->eval("if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end", [$lock_key, $lock_value], 1);
} else {
// 获取锁失败
}

3. 计数器

可以使用Redis的计数器功能对某个值进行自增或自减操作。

$key = 'test_counter';
$redis->incr($key); // 自增1
$redis->incrby($key, 10); // 自增10
$redis->decr($key); // 自减1
$redis->decrby($key, 5); // 自减5

结语

本文带领大家从Redis的入门学习开始,逐步了解了Redis的各种数据结构和持久化方式,最后通过几个实战示例来展示Redis的实际应用。希望读者能够通过本文对Redis有一个更加深入的了解,并且能够在实际开发中灵活运用。

相关文章