红色视界从零开始学Redis(redis视频黑马)

2023-05-16 12:35:29 从零开始 黑马 视界

红色视界:从零开始学Redis

Redis是一个开源的高性能Key-Value数据库,它提供了多种数据结构(字符串、哈希、列表、集合、有序集合)以及丰富的命令,能够满足各种场景下的数据存储和处理需求。本文将从零开始,介绍如何使用Redis,并展示一些常用的操作。

1. 安装Redis

Redis提供了多种编译安装和二进制安装方式,本文将以二进制安装方式为例。首先在官网(https://redis.io/download)上下载最新版的Redis二进制包,解压后执行以下命令即可启动Redis:

$ cd redis-5.0.5
$ src/redis-server

2. 使用Redis

Redis提供了命令行工具redis-cli来与Redis进行交互。首先启动redis-cli,然后输入以下命令尝试设定一个键值对:

$ src/redis-cli
127.0.0.1:6379> SET mykey "hello world"
OK

这里使用了SET命令,将字符串”hello world”存入名为mykey的键中。可以使用GET命令来获取相应的值:

127.0.0.1:6379> GET mykey
"hello world"

除了字符串,Redis还提供了多种数据结构,其中最常用的包括:

– 哈希(hash):相当于字典或者对象,可以存储多个属性和对应的值。

– 列表(list):可以容纳多个元素,支持从两端添加和删除元素。

– 集合(set):可以容纳多个元素,不重复且无序。

– 有序集合(sorted set):可以容纳多个元素,排名有序且不重复。

下面是一些常用的操作示例:

哈希:

127.0.0.1:6379> HSET myhash field1 "value1"
(integer) 1
127.0.0.1:6379> HSET myhash field2 "value2"
(integer) 1
127.0.0.1:6379> HGET myhash field1
"value1"

列表:

127.0.0.1:6379> LPUSH mylist "1"
(integer) 1
127.0.0.1:6379> LPUSH mylist "2"
(integer) 2
127.0.0.1:6379> LPOP mylist
"2"

集合:

127.0.0.1:6379> SADD myset "value1"
(integer) 1
127.0.0.1:6379> SADD myset "value2"
(integer) 1
127.0.0.1:6379> SMEMBERS myset
1) "value2"
2) "value1"

有序集合:

127.0.0.1:6379> ZADD myzset 1 "value1"
(integer) 1
127.0.0.1:6379> ZADD myzset 2 "value2"
(integer) 1
127.0.0.1:6379> ZRANGE myzset 0 -1 WITHSCORES
1) "value1"
2) "1"
3) "value2"
4) "2"

3.使用Redis实现分布式锁

分布式锁是一个常见的分布式系统问题,Redis提供了一种非常简单的实现方式,即通过setnx命令设定一个键值对,来控制对某个资源的访问。下面是一个实现示例:

“`python

import redis

class RedisLock:

def __init__(self, redis_client, key, expire):

self.redis_client = redis_client

self.key = key

self.expire = expire

def acquire(self):

while True:

success = self.redis_client.setnx(self.key, 1)

if success:

self.redis_client.expire(self.key, self.expire)

return True

else:

if self.redis_client.ttl(self.key) == -1:

self.redis_client.expire(self.key, self.expire)

time.sleep(0.1)

def release(self):

self.redis_client.delete(self.key)


这里使用了Python Redis包来连接Redis数据库,并实现了一个RedisLock类,其中acquire方法用于获取锁,release方法用于释放锁。在获取锁时,首先执行setnx命令尝试设定一个键值对,如果设定成功则返回True,表示获取锁成功;否则通过ttl命令判断当前锁是否已过期,如果已过期则重新获取锁。

4.总结

本文介绍了Redis的安装、使用以及实现分布式锁的示例。除了上述内容,Redis还提供了丰富的配置选项、持久化和复制机制等高级特性,可以根据具体需求进行使用。当然,Redis也有一些缺点,如单线程性能瓶颈、无法提供完整ACID事务等,需要根据实际场景进行权衡和选择。

相关文章