Redis 最强详解 (附举例代码)

Redis 介绍


Redis是一个开源的、高性能的键值对数据库,它支持多种数据结构,如字符串、哈希表、列表、集合、有序集合等。Redis的内存读取速度非常快,因为它将所有数据都存储在内存中,而不是硬盘。此外,Redis可以使用持久化机制将数据保存到硬盘上,以便在服务器重启之后也能够继续访问这些数据。

Redis有以下几个主要的特点:

  • 内存读写速度非常快:因为Redis将数据都存储在内存中,所以它可以快速读写数据。
  • 多种数据结构支持:Redis支持多种数据结构,如字符串、哈希表、列表、集合、有序集合等,使得开发者可以根据应用场景选择最合适的数据结构。
  • 持久化机制:Redis支持两种持久化机制,即RDB和AOF。RDB是将数据保存到硬盘上的快照方式,而AOF是将写入操作保存到文件中,以便在服务器重启之后恢复数据。
  • 高性能:Redis采用单线程模型,避免了多线程带来的竞争问题,同时通过事件轮询机制提高了并发处理能力。
  • 分布式支持:Redis支持多种分布式场景,如主从复制、哨兵模式和集群模式等。

总之,Redis是一个非常强大、灵活的数据库,适合处理高并发、高性能的应用场景。

Redis是一款高性能的非关系型数据库,可以存储键值对、列表、集合、有序集合、哈希表等多种数据类型。


Redis的基本操作代码

1.连接Redis

import redis

redis_client = redis.Redis(host='localhost', port=6379, db=0)

2.操作键值对

# 设置键值对
redis_client.set('key', 'value')

# 获取键对应的值
value = redis_client.get('key')

# 删除键值对
redis_client.delete('key')

3.操作列表

# 在列表左侧添加元素
redis_client.lpush('list', 'value1')
redis_client.lpush('list', 'value2')

# 获取列表所有元素
values = redis_client.lrange('list', 0, -1)

# 删除列表中的元素
redis_client.lrem('list', 0, 'value1')

4.操作集合

# 添加元素到集合
redis_client.sadd('set', 'value1')
redis_client.sadd('set', 'value2')

# 获取集合所有元素
values = redis_client.smembers('set')

# 删除集合中的元素
redis_client.srem('set', 'value1')

5.操作有序集合

# 在有序集合中添加元素
redis_client.zadd('zset', {'value1': 1, 'value2': 2})

# 获取有序集合所有元素
values = redis_client.zrange('zset', 0, -1)

# 删除有序集合中的元素
redis_client.zrem('zset', 'value1')

6.操作哈希表

# 在哈希表中设置字段值
redis_client.hset('hash', 'key1', 'value1')
redis_client.hset('hash', 'key2', 'value2')

# 获取哈希表中的字段值
value = redis_client.hget('hash', 'key1')

# 删除哈希表中的字段
redis_client.hdel('hash', 'key1')

Redis 在Python文件中具体代码实现

#!/usr/bin/env python3
import redis
import json
import time


REDIS_HOST = '127.0.0.1'
REDIS_PORT = 7890
REDIS_DB = 0
REDIS_PASSWORD = '12356'
REDIS_MAX_CONNECTIONS = 1000


def create_conn(db=REDIS_DB, decode_responses=False):
	# 创建连接池
	pool = redis.ConnectionPool(
		host=REDIS_HOST,
		port=REDIS_PORT,
		db=db,
		max_connections=REDIS_MAX_CONNECTIONS,
		password=REDIS_PASSWORD,
		decode_responses = decode_responses,
	)
	
	# 创建连接
	conn = redis.StrictRedis(connection_pool=pool)
	return conn

# 使用function进行连接
db_1 = create_conn(1)

Redis 高级功能--切片,发布/订阅

一、Redis切片

Redis切片(sharding)是将一个大的Redis数据库分为多个小的Redis数据库,达到分布式存储的目的。Redis切片可以提高系统性能、可用性和扩展性。

Redis切片的实现方式有两种:

1.客户端分片

客户端分片是指在客户端通过一定的算法将数据分散到多个Redis服务器上。客户端分片的优点是实现简单,但是需要客户端维护数据的分片和负载均衡等问题。

2.服务端分片

服务端分片是指在Redis服务器端实现数据的切片。服务端分片的优点是可以通过配置、监控、管理工具来管理服务端,用于处理数据切片和负载均衡等问题。

下面是Redis服务端分片的详细代码:

import redis
from rediscluster import RedisCluster

startup_nodes = [{"host": "127.0.0.1", "port": "7000"}, {"host": "127.0.0.1", "port": "7001"}, {"host": "127.0.0.1", "port": "7002"}]

rc = RedisCluster(startup_nodes=startup_nodes, decode_responses=True)

# 写入数据
for i in range(1, 101):
    key = "key" + str(i)
    value = "value" + str(i)
    rc.set(key, value)

# 读取数据
for i in range(1, 101):
    key = "key" + str(i)
    print(rc.get(key))

上面的代码创建了一个Redis集群,该集群有三个节点,分别是7000、7001、7002端口,使用RedisCluster类连接Redis集群,在集群中写入了100条数据,然后在集群中读取数据。

二、Redis管道

Redis管道是一种批量执行Redis命令的方式,将多个命令一次性发送给Redis服务器,然后一次性接收Redis服务器的响应。Redis管道可以提高Redis服务器的性能,减少网络开销和Redis服务器的负担。

下面是Redis管道的详细代码:

import redis

r = redis.Redis(host='127.0.0.1', port=6379)
pipe = r.pipeline()

# 写入数据
for i in range(1, 101):
    key = "key" + str(i)
    value = "value" + str(i)
    pipe.set(key, value)

# 读取数据
for i in range(1, 101):
    key = "key" + str(i)
    pipe.get(key)

# 执行管道
result = pipe.execute()

# 输出结果
for i in result:
    print(i)

上面的代码创建了一个Redis连接对象,使用Redis管道批量写入和读取了100条数据,然后执行管道,最后输出结果。

三、Redis发布/订阅

Redis发布/订阅是一种消息模式,可以实现多个客户端之间的实时通信。发布者将消息发布到一个通道上,订阅者订阅该通道,当有消息发布到该通道时,订阅者会自动接收到该消息。Redis发布/订阅可以用于实现聊天室、游戏、即时通讯等场景。

下面是Redis发布/订阅的详细代码:

import redis
import threading

# 创建Redis连接对象
r = redis.Redis(host='127.0.0.1', port=6379)

# 订阅通道
def subscribe(channel):
    p = r.pubsub()
    p.subscribe(channel)
    for message in p.listen():
        print("收到消息: ", message['data'])

# 发布消息
def publish(channel, message):
    r.publish(channel, message)

# 创建两个线程,一个订阅通道,一个发布消息
t1 = threading.Thread(target=subscribe, args=("channel1",))
t2 = threading.Thread(target=publish, args=("channel1", "hello world"))

# 启动线程
t1.start()
t2.start()

# 等待线程执行完毕
t1.join()
t2.join()

上面的代码创建了一个Redis连接对象,创建了两个线程,一个订阅channel1通道,一个发布hello world消息到channel1通道。最后启动两个线程并等待线程执行完毕。当发布消息时,订阅者就会接收到该消息。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值