十五、redis的使用

目录

  • 一、简介
    • 1.1 nosql介绍
    • 1.2 redis特性
    • 1.3 redis优势
    • 1.4 redis应用场景
  • 二、安装
    • 2.1 Macos下安装
    • 2.2 Linux下安装
    • 2.4 客户端连接
    • 2.5 切换数据库
  • 三、数据库操作
    • 3.1 string类型
    • 3.2 键的操作
    • 3.3 Hash类型
    • 3.4 list类型
    • 3.5 set类型
    • 3.6 zset类型
  • 四、和python交互
    • 4.1 安装redis包
    • 4.2 string方法操作
    • 4.3 在django使用redis

一、简介

  • Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
  • Redis是 NoSQL技术阵营中的一员,它通过多种键值数据类型来适应不同场景下的存储需求,借助一些高层级的接口使用其可以胜任,如缓存、队列系统的不同角色
  • 官网介绍

1.1 nosql介绍

一类新出现的数据库(not only sql),它的特点有:

  • 不支持SQL语法
  • 不支持事务
  • 存储结构跟传统关系型数据库中的那种关系表完全不同,nosql中存储的数据都是KV形式
  • NoSQL的世界中没有一种通用的语言,每种nosql数据库都有自己的api和语法,以及擅长的业务场景
  • NoSQL中的产品种类相当多:
    • Mongodb
    • Redis
    • Hbase hadoop
    • Cassandra hadoop

1.2 redis特性

Redis 与其他 key - value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

1.3 redis优势

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

1.4 redis应用场景

  • 用来做缓存(ehcache/memcached)——redis的所有数据是放在内存中的(内存数据库)
  • 可以在某些特定应用场景下替代传统数据库——比如社交类的应用
  • 在一些大型系统中,巧妙地实现一些特定的功能:session共享、购物车

二、安装

2.1 Macos下安装

(1) 通过brew去安装

brew install redis

十五、redis的使用_第1张图片
安装路径位于

/opt/homebrew/opt/redis

十五、redis的使用_第2张图片
(2) 在前台启动和停止 Redis
要测试 Redis 安装,可以运行下面命令:

redis-server

如果成功,您将看到 Redis 的启动日志,Redis 将在前台运行。
十五、redis的使用_第3张图片
可以看到这种启动方式, 终端会一直工作, 要停止 Redis,输入 Ctrl-C 。
(3) 在后台启动和停止 Redis
通过 launchd 后台启动, 命令如下:

brew services start redis

十五、redis的使用_第4张图片
这将启动 Redis 并在登录时重新启动它。您可以通过运行以下命令来检查 launchd 托管 Redis 的状态:

brew services info redis

十五、redis的使用_第5张图片
要停止该服务,运行如下命令:

brew services stop redis

2.2 Linux下安装

(1) 下载源文件

wget https://download.redis.io/redis-stable.tar.gz

(2) 解压/复制

tar -zxvf redis-stable.tar.gz
sudo mv ./redis-stable /usr/local/redis/

(3) 编译安装

cd /usr/local/redis/
sudo make
sudo make test
sudo make install

(4) 查看安装文件

cd /usr/local/bin
ls -all

在这里插入图片描述

- redis-server: redis服务器
- redis-cli: redis命令行客户端
- redis-benchmark: redis性能测试工具
- redis-check-aof: AOF文件修复工具
- redis-check-rdb: RDB文件检索工具

(5) 移动配置文件

sudo cp /usr/local/redis/redis.conf /etc/redis/

2.3 个性化配置
Macos的配置文件位于:

/opt/homebrew/etc/redis.conf

Linux的配置文件位于:

/etc/redis/redis.conf

(1) 绑定ip
如果需要远程访问,可将此⾏注释,或绑定⼀个真实ip, 默认是配置了本机地址
十五、redis的使用_第6张图片
(2) 端⼝,默认为6379
在这里插入图片描述
(3) 是否以守护进程运⾏

  • 如果以守护进程运⾏,则不会在命令⾏阻塞,类似于服务
  • 如果以⾮守护进程运⾏,则当前终端被阻塞
  • 设置为yes表示守护进程,设置为no表示⾮守护进程
  • 推荐设置为yes

在这里插入图片描述
(4) 数据库文件
在这里插入图片描述
(5) 数据⽂件存储路径
在这里插入图片描述
(6) 配置日志文件
需要提前创建目录和文件在这里插入图片描述
(7) 默认数据库的个数
在这里插入图片描述

2.4 客户端连接

客户端连接的命令为

redis-cli

通过–help可以查看帮助选项
十五、redis的使用_第7张图片
连接本机可以不需要指定-h和-p, 连接本机成功展示如下:
在这里插入图片描述
此时输入ping会返回pong
在这里插入图片描述

2.5 切换数据库

数据库没有名称,默认有16个,通过0-15来标识,连接redis默认选择第一个数据库
通过select n可以切换数据库, 其中n为0~15, 如下所示:
在这里插入图片描述

三、数据库操作

Redis支持以下5种主要的数据类型:

  • 字符串(String):最基本的数据类型,可以存储字符串、整数或浮点数。
  • 列表(List):有序的字符串列表,可以在列表的头部或尾部进行元素的插入、删除和获取。
  • 哈希(Hash):键值对的集合,适合存储对象的属性和值。
  • 集合(Set):无序的字符串集合,不允许重复的元素。
  • 有序集合(Sorted Set):类似于集合,每个元素都关联一个分数,可以根据分数进行排序,并且每个元素的分数必须是唯一的。

3.1 string类型

字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。
(1) 保存值
如果设置的键不存在则为添加,如果设置的键已经存在则修改

set key value

例如:
十五、redis的使用_第8张图片
(2) 设置键值及过期时间,以秒为单位

setex key second value

例如:
在这里插入图片描述
(3) 设置多个键值
mset key1 value1 [key2 value2 …]
十五、redis的使用_第9张图片
(4) 追加值
append key value
十五、redis的使用_第10张图片
(5) 获取单个值

get key

(6) 根据多个键获取多个值

mget key1 key2 ...

在这里插入图片描述

3.2 键的操作

(1) 搜索键, 支持正则表达式

keys pattern

十五、redis的使用_第11张图片
通配符*表示所有.

(2) 判断键是否存在

exists key1

十五、redis的使用_第12张图片
存在返回1, 不存在返回0
(3) 查看键对应的value的类型

type key

在这里插入图片描述
(4) 删除键

del key1 key2 ...

十五、redis的使用_第13张图片
(5) 设置过期时间,以秒为单位

expire key seconds

在这里插入图片描述
返回结果 (integer) 1 表示命令执行成功,且设置过期时间成功。

(6) 查看有效时间,以秒为单位
ttl key
返回结果 (integer) -2 表示该键不存在或已过期。具体含义如下:

  • -1 表示键存在但没有设置过期时间。
  • -2 表示键不存在或已过期。
  • 其他正整数表示键的剩余生存时间(以秒为单位)。
    在这里插入图片描述
    过期后, 这个键值对会删除掉.

3.3 Hash类型

  • hash⽤于存储对象,对象的结构为属性、值
  • 值的类型为string
    (1) 增加、修改
    设置单个属性
hset key field value [field value...]

在这里插入图片描述
(2) 获取指定键所有的属性名

hkeys key

十五、redis的使用_第14张图片
(3) 获取⼀个属性的值

hget key field

十五、redis的使用_第15张图片
(4) 获取多个属性的值

hmget  key field [field...]

十五、redis的使用_第16张图片
(5) 获取所有属性的值

hvals key

在这里插入图片描述
(6) 删除操作
删除整个hash键及值,使⽤del命令
删除属性,属性对应的值会被⼀起删除

hdel key field1 field2 ...

十五、redis的使用_第17张图片

3.4 list类型

  • 列表的元素类型为string
  • 按照插⼊顺序排序
    (1) 添加
    在左侧插⼊数据
lpush key value1 value2 ...

在这里插入图片描述
在右侧插⼊数据

rpush key value1 value2 ...

在这里插入图片描述
(2) 在指定元素的前或后插⼊新元素
linsert key before或after 现有元素 新元素
在这里插入图片描述
(3) 获取元素
返回列表⾥指定范围内的元素
lrarge key start stop

  • start、stop为元素的下标索引
  • 索引从左侧开始,第⼀个元素为0
  • 索引可以是负数,表示从尾部开始计数,如-1表示最后⼀个元素
    十五、redis的使用_第18张图片
    (4) 设置指定索引位置的元素值
    lset key index value
  • 索引从左侧开始,第⼀个元素为0
  • 索引可以是负数,表示尾部开始计数,如-1表示最后⼀个元素
    十五、redis的使用_第19张图片
    (5) 删除指定元素
    lrem key count value
  • 将列表中前count次出现的值为value的元素移除
  • count > 0: 从头往尾移除
  • count < 0: 从尾往头移除
  • count = 0: 移除所有
    十五、redis的使用_第20张图片

3.5 set类型

  • ⽆序集合
  • 元素为string类型
  • 元素具有唯⼀性,不重复
  • 说明:对于集合没有修改操作
    (1) 添加元素
sadd key member1 member2 ...

在这里插入图片描述
(2) 获取所有元素

smembers key

十五、redis的使用_第21张图片
(3) 删除指定元素

srem key member [member...]

在这里插入图片描述
在这里插入图片描述

3.6 zset类型

  • sorted set,有序集合
  • 元素为string类型
  • 元素具有唯⼀性,不重复
  • 每个元素都会关联⼀个double类型的score,表示权重,通过权重将元素从⼩到⼤排序
  • 没有修改操作
    (1) 增加
zadd key score1 member1 score2 member2 ..

例如向键’a4’的集合中添加元素’lisi’、‘wangwu’、‘zhaoliu’、‘zhangsan’,权重(score)分别为4、5、6、3
在这里插入图片描述

(2) 获取

zrange key start stop
  • 返回指定范围内的元素
  • start、stop为元素的下标索引
  • 索引从左侧开始,第⼀个元素为0
  • 索引可以是负数,表示从尾部开始计数,如-1表示最后⼀个元素
    十五、redis的使用_第22张图片
    (3) 返回score值在min和max之间的成员
zrangebyscore key min max

在这里插入图片描述
(4) 返回成员member的score值
在这里插入图片描述
(5) 删除

zrem key member1 member2 ...

删除集合’a4’中元素’zhangsan’
十五、redis的使用_第23张图片
删除权重在指定范围的元素

zremrangebyscore key minindex maxindex

在这里插入图片描述

四、和python交互

4.1 安装redis包

进入虚拟环境中安装

mkvirtualenv -p python3 redis_study
workon redis_study
pip install redis

使用pycharm创建项目
十五、redis的使用_第24张图片
创建StrictRedis对象

from redis import *

if __name__ == "__main__":
    try:
        # 创建StrictRedis对象,与redis服务器建⽴连接
        # 通过init创建对象,指定参数host、port与指定的服务器和端⼝连接,host默认为localhost,port默认为6379,db默认为0
        sr = StrictRedis(host='localhost', port=6379, db=0)
        # 简写
        # sr=StrictRedis()
    except Exception as e:
        print(e)

根据不同的类型,拥有不同的实例⽅法可以调⽤,与前⾯学的redis命令对应,⽅法需要的参数与命令的参数⼀致

4.2 string方法操作

(1) set操作
⽅法set,添加键、值,如果添加成功则返回True,如果添加失败则返回False
注意: Redis中存储的数据都是二进制的,所以存储的对象都是字节串, 字节串前是有一个b来区分的

if __name__ == "__main__":
    try:
        sr = StrictRedis()
        result = sr.set('name', '张三2')
        # 输出响应结果,如果添加成功则返回True,否则返回False
        print(result)
    except Exception as e:
        print(e)

(2) string获取
⽅法get,添加键对应的值,如果键存在则返回对应的值,如果键不存在则返回None

if __name__ == "__main__":
    try:
        sr = StrictRedis()
        # 获取键name的值
        result = sr.get('name')
        # 有中文的话需要解码
        decoded_result = result.decode('utf-8')
        print(result)
        print(decoded_result)
    except Exception as e:
        print(e)

输出结果:

b'\xe5\xbc\xa0\xe4\xb8\x892'
张三2

(3) string修改
⽅法set,如果键已经存在则进⾏修改,如果键不存在则进⾏添加

from redis import *

if __name__ == "__main__":
    try:
        sr = StrictRedis()
        # 获取键name的值
        sr.set('name', 'zhangsan')
        result = sr.get('name').decode('utf-8')
        print(f"修改前{result}")
        sr.set('name', 'lisi')
        result = sr.get('name').decode('utf-8')
        print(f"修改后{result}")
    except Exception as e:
        print(e)

输出结果:

修改前zhangsan
修改后lisi

(4) string删除
⽅法delete,删除键及对应的值,如果删除成功则返回受影响的键数,否则则返 回0

from redis import *

if __name__ == "__main__":
    try:
        sr = StrictRedis()
        # 获取键name的值
        sr.set('name', 'zhangsan')
        sr.delete('name')
        result = sr.get('name')
        print(f"删除后{result}")
    except Exception as e:
        print(e)

结果:

删除后None

(5) 获取键
⽅法keys,根据正则表达式获取键

from redis import *

if __name__ == "__main__":
    try:
        sr = StrictRedis()
        # 获取所有的键
        result = sr.keys()
        # 输出响应结果,所有的键构成⼀个列表,如果没有键则返回空列表
        print(result)
    except Exception as e:
        print(e)

输出结果:

[b'hobby', b'user', b'arr1']

4.3 在django使用redis

之前django的session默认是存在的数据库里面的,我们也可以把session存储在redis里面
(1) 创建django项目

 workon redis_study 
 pip install django
 pip install redis
 cd workspace/python/redis_study
 django-admin startproject session_test

(2) 修改settings文件,增加如下项

SESSION_ENGINE = 'redis_sessions.session'
SESSION_REDIS = {
    'host': 'localhost',
    'port': 6379,
    'db': 2, # 选择3个数据库
    'password': '',
    'prefix': 'session',
    'socket_timeout': 1
}
SESSION_COOKIE_AGE = 3600  # Session过期时间,单位为秒

其中,SESSION_ENGINE指定使用redis_sessions.session作为Session存储引擎。
SESSION_REDIS指定了Redis的连接配置,其中包括主机、端口、数据库、密码等信息。prefix参数指定了存储在Redis中的Session键的前缀,可以根据需要自行设置。
SESSION_COOKIE_AGE指定了Session的过期时间,单位为秒。具体的配置可以根据实际需求进行调整。

(3) 添加应用

cd session_test 
python manage.py startapp booktest

(4) 修改setting文件添加booktest和redis应用


INSTALLED_APPS = [
    ...
    'booktest',
    'redis'
]

(5) 配置项目的url文件
将booktest应用的url配置加到映射中

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    # 添加映射, 将booktest/路径 和 booktest.urls.py进行关联
    path('booktest/', include('booktest.urls')),
]

(6) 测试
打开booktest/views.py文件,创建session_set和session_get视图如下

from django.http import HttpResponse


# 保存session
def session_set(request):
    request.session['name'] = '张三'
    return HttpResponse('ok')

# 获取session
def session_get(request):
    name = request.session['name']
    return HttpResponse(name)

添加booktest/urls.py文件,配置url如下

from django.contrib import admin
from django.urls import path, include

from booktest import views

urlpatterns = [
    path('session_set/', views.session_set, name='session_set'),
    path('session_get/', views.session_get, name='session_get'),
]

(7) 启动项目

python manage.py runserver

输入地址:http://127.0.0.1:8000/booktest/session_set/ 进行session存储
输入地址http://127.0.0.1:8000/booktest/session_get/ 获取session值
然后通过redis-cli客户端查看
十五、redis的使用_第25张图片
查看对应的value
在这里插入图片描述
Base64在线解码https://base64.us/
十五、redis的使用_第26张图片
其中\u5f20\u4e09对应的中文就是张三
十五、redis的使用_第27张图片

你可能感兴趣的:(python,redis,数据库,缓存)