Redis全面知识点有哪些

1. Redis是什么?

Redis是一个开源、内存中的数据结构存储实现,用作数据库、缓存和消息队列代理。它支持数据结构如字符串、哈希、列表、集合等。

使用Redis可以很好的解决高并发请求下的数据读写操作问题,提供快速操作的支持。

简单来说 Redis 就是一个内存中的(也可以持久化到磁盘中)存储键值对的数据结构服务器,支持丰富的数据结构,可以支持多达数万并发连接。

2. Redis的优缺点

2.1 优点

稳定可靠

Redis是一个非常稳定的Key-Value数据库,在互联网技术快速发展的过程中,Redis已经被证实是非常值得信赖的,Redis的主从复制可以很好的支持高并发。此外,Redis支持多数据结构、支持持久化机制以及支持Lua脚本等,都是非常优秀的。

速度快,性能好

Redis支持内存存储、键值对存储、多结构存储,相当快。性能方面非常优秀,特别是读写性能。

丰富的数据类型

Redis特别适合构建数据较复杂的应用程序,它高效的支持string、set、hash、list、zset和有序集合等这些数据类型,可以使用这些类型完成很多有趣的操作和问题。

2.2 缺点

持久化问题

Redis是一款内存数据库,意味着数据的持久化需要通过RDB和AOF两种持久化机制进行实现。但是这种对磁盘频繁的写入可能对IO提出一定压力。

在线扩容问题

在线扩容是Redis常见的问题之一。因为Redis本身的每个Key-Value存储在一台服务器上,当数据量增长到一定程度时,单台服务器就会出现瓶颈,此时需要扩容。但是Redis并不支持在线扩容,只支持后期添加节点,不能真正意义上的通过在线扩容来实现集群的稳定。

3. Redis的基本使用方式

Redis是一个支持多数据结构的数据库,我们要对这些数据结构进行添加、查询、删除、修改等操作可以使用如下方式进行:

3.1 连接Redis

import redis

# 默认连接

redis_connection = redis.Redis()

3.2 操作key-value

Redis通过Key-Value结构存储,我们可以通过Redis的python客户端完成Key-Value的添加、删除、查询等操作,具体如下:

# 添加字符串类型的数据到Redis中

redis_connection.set('name', 'Tom')

# 获取指定key的数据

name = redis_connection.get('name')

# 删除指定key的数据

redis_connection.delete('name')

# 判断key是否存在

is_exist = redis_connection.exists('name')

3.3 操作Hash类型

使用Redis存储散列数据类型

# 添加hash类型数据到Redis中

redis_connection.hset('user', 'name', 'Tom')

redis_connection.hset('user', 'age', '20')

# 获取hash中的单个值

name = redis_connection.hget('user', 'name')

# 获取整个hash数据

user = redis_connection.hgetall('user')

# 删除hash数据中的指定key

redis_connection.hdel('user', 'name')

# 获取整个hash数据

user = redis_connection.hgetall('user')

3.4 操作list类型

Redis还支持列表数据类型

# 添加list类型到 Redis 中

redis_connection.lpush('list', 'a')

redis_connection.lpush('list', 'b')

redis_connection.lpush('list', 'c')

# 获取指定区间内的list数据,下标从0开始计算

list_range = redis_connection.lrange('list', 0, 2)

# 获取list中所有数据

list_data = redis_connection.lrange('list', 0, -1)

# 通过索引获取list中指定元素

index_data = redis_connection.lindex('list', 0)

# 获取list中元素的个数

length = redis_connection.llen('list')

# 弹出左侧数据,即从左边出队

left_pop_data = redis_connection.lpop('list')

# 弹出右侧数据,即从右边出队

right_pop_data = redis_connection.rpop('list')

数据库标签