十五、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

在这里插入图片描述
安装路径位于

/opt/homebrew/opt/redis

在这里插入图片描述
(2) 在前台启动和停止 Redis
要测试 Redis 安装,可以运行下面命令:

redis-server

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

brew services start redis

在这里插入图片描述
这将启动 Redis 并在登录时重新启动它。您可以通过运行以下命令来检查 launchd 托管 Redis 的状态:

brew services info redis

在这里插入图片描述
要停止该服务,运行如下命令:

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, 默认是配置了本机地址
在这里插入图片描述
(2) 端⼝,默认为6379
在这里插入图片描述
(3) 是否以守护进程运⾏

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

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

2.4 客户端连接

客户端连接的命令为

redis-cli

通过–help可以查看帮助选项
在这里插入图片描述
连接本机可以不需要指定-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

例如:
在这里插入图片描述
(2) 设置键值及过期时间,以秒为单位

setex key second value

例如:
在这里插入图片描述
(3) 设置多个键值
mset key1 value1 [key2 value2 …]
在这里插入图片描述
(4) 追加值
append key value
在这里插入图片描述
(5) 获取单个值

get key

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

mget key1 key2 ...

在这里插入图片描述

3.2 键的操作

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

keys pattern

在这里插入图片描述
通配符*表示所有.

(2) 判断键是否存在

exists key1

在这里插入图片描述
存在返回1, 不存在返回0
(3) 查看键对应的value的类型

type key

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

del key1 key2 ...

在这里插入图片描述
(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

在这里插入图片描述
(3) 获取⼀个属性的值

hget key field

在这里插入图片描述
(4) 获取多个属性的值

hmget  key field [field...]

在这里插入图片描述
(5) 获取所有属性的值

hvals key

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

hdel key field1 field2 ...

在这里插入图片描述

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表示最后⼀个元素
    在这里插入图片描述
    (4) 设置指定索引位置的元素值
    lset key index value
  • 索引从左侧开始,第⼀个元素为0
  • 索引可以是负数,表示尾部开始计数,如-1表示最后⼀个元素
    在这里插入图片描述
    (5) 删除指定元素
    lrem key count value
  • 将列表中前count次出现的值为value的元素移除
  • count > 0: 从头往尾移除
  • count < 0: 从尾往头移除
  • count = 0: 移除所有

3.5 set类型

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

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

smembers key

在这里插入图片描述
(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表示最后⼀个元素
    在这里插入图片描述
    (3) 返回score值在min和max之间的成员
zrangebyscore key min max

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

zrem key member1 member2 ...

删除集合’a4’中元素’zhangsan’
在这里插入图片描述
删除权重在指定范围的元素

zremrangebyscore key minindex maxindex

在这里插入图片描述

四、和python交互

4.1 安装redis包

进入虚拟环境中安装

mkvirtualenv -p python3 redis_study
workon redis_study
pip install redis

使用pycharm创建项目
在这里插入图片描述
创建StrictRedis对象

from redis import *if __name__ == "__main__":try:# 创建StrictRedis对象,与redis服务器建⽴连接# 通过init创建对象,指定参数host、port与指定的服务器和端⼝连接,host默认为localhost,port默认为6379,db默认为0sr = 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,否则返回Falseprint(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 djangopip install rediscd workspace/python/redis_studydjango-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, includeurlpatterns = [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, includefrom booktest import viewsurlpatterns = [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客户端查看
在这里插入图片描述
查看对应的value
在这里插入图片描述
Base64在线解码https://base64.us/
在这里插入图片描述
其中\u5f20\u4e09对应的中文就是张三
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/126620.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI视野·今日Sound 声学论文速览 第三十二期】Tue, 24 Oct 2023

AI视野今日CS.Sound 声学论文速览 Tue, 24 Oct 2023 Totally 20 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;nvas3d, 基于任意录音和室内3D信息合成重建不同听角&#xff08;位置&#xff09;处的新的声音。(from apple cmu) website: htt…

LeetCode----1935. 可以输入的最大单词数

题目 键盘出现了一些故障,有些字母键无法正常工作。而键盘上所有其他键都能够正常工作。 给你一个由若干单词组成的字符串 text ,单词间由单个空格组成(不含前导和尾随空格);另有一个字符串 brokenLetters ,由所有已损坏的不同字母键组成,返回你可以使用此键盘完全输入…

数据结构详细笔记——二叉树

文章目录 二叉树的定义和基本术语特殊的二叉树满二叉树完全二叉树二叉排序树平衡二叉树 二叉树的常考性质完全二叉树的常考性质二叉树的存储结构顺序存储链式存储 二叉树的先中后序遍历先序遍历&#xff08;空间复杂度&#xff1a;O&#xff08;h&#xff09;&#xff09;中序遍…

有奖快来抱走全新HUAWEI WATCH GT4

亲爱的openGauss用户&#xff0c; 为了给您提供更好的社区体验&#xff0c;现诚邀您参与openGauss社区满意度问卷调研。您的每一个宝贵建议都是我们进步的方向。 手机扫描二维码即可填写问卷&#xff0c;请根据您真实的体验情况填写问卷&#xff0c;问卷反馈越真实有效越有机…

vue3写nav滚动事件中悬停在顶部

1. 防抖类Animate, 使用requestAnimationFrame代替setTimeout 也可以使用节流函数, lodash有现成的防抖和节流方法 _.debounce防抖 _.throttle节流 export default class Animate {constructor() {this.timer null;}start (fn) > {if (!fn) {throw new Error(需要执行…

【面试】什么是霍桑效应,在项目中具体要怎样使用霍桑效应呢?

其实霍桑效应&#xff08;Hawthorne Effect&#xff09;是一种很经典的组织行为学现象&#xff0c;它阐述了被观察者会因知晓自己被观察而改变自己的行为。在项目管理中&#xff0c;我们可以通过霍桑效应来激励团队提高工作效率。具体运用可以从以下几个方面&#xff1a; 告知…

亲测解决Pytorch TypeError: object of type ‘numpy.int64‘ has no len()

这个问题是小虎在初始化自适应平均池化的时候遇到的&#xff0c;解决方法是限制初始化时池化大小的类型。 问题原文 Exception has occurred: TypeError object of type numpy.int64 has no len()File "D:\Complier\LEF\lib\model\segmentation\heads\modules\fgModules…

使用 TensorFlow SSD 网络进行对象检测

使用 TensorFlow SSD 网络进行对象检测 目录 描述这个示例是如何工作的&#xff1f; 处理输入图准备数据sampleUffSSD 插件验证输出TensorRT API 层和操作 先决条件运行示例 示例 --help 选项 附加资源许可证更改日志已知问题 描述 该示例 sampleUffSSD 预处理 TensorFlow …

js的入口函数有哪些?

在JavaScript中&#xff0c;常见的入口函数有以下几种&#xff1a; window.onload: 该函数会在页面完全加载完成后执行&#xff0c;包括所有图像、CSS样式表、JavaScript脚本等。document.ready: 该函数会在DOM&#xff08;文档对象模型&#xff09;完全加载完成后执行&#x…

pmp到底有多难考?

单说通过&#xff0c;难度不算特别高&#xff0c;但也有几点难度&#xff1a; 1、试卷难度&#xff1a;是笔试&#xff0c;180道题&#xff0c;题量大&#xff0c;比较机试耗时间&#xff1b; 2、题目难度&#xff1a;题目是中英文对照&#xff0c;可能有翻译不到位的地方&am…

0基础学习PyFlink——事件时间和运行时间的窗口

大纲 定制策略运行策略Reduce完整代码滑动窗口案例参考资料 在 《0基础学习PyFlink——时间滚动窗口(Tumbling Time Windows)》一文中&#xff0c;我们使用的是运行时间(Tumbling ProcessingTimeWindows)作为窗口的参考时间&#xff1a; reducedkeyed.window(TumblingProcess…

第4章_运算符

文章目录 1. 算术运算符1.1 加法与减法运算符1.2 乘法与除法运算符1.3 求模运算符 2. 比较运算符2.1 等号运算符2.2 安全等于运算符2.3 不等于运算符2.4 空运算符2.5 非空运算符2.6 最小值运算符2.7 最大值运算符2.8 BETWEEN AND运算符2.9 IN运算符2.10 NOT IN运算符2.11 LIKE运…

代码随想录算法训练营第三十九天丨 动态规划part02

62.不同路径 思路 动态规划 机器人从(0 , 0) 位置出发&#xff0c;到(m - 1, n - 1)终点。 按照动规五部曲来分析&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j] &#xff1a;表示从&#xff08;0 &#xff0c;0&#xff09;出发&#…

利用win32的GetLastInputInfo函数实现锁屏(C#)

前两天看到群里面讨论这个问题&#xff0c;刚好我们上一家公司的系统也有这个功能&#xff0c;就研究了一下&#xff0c;我们这边实现这个功能的目的如下&#xff1a;当用户长时间不操作系统时&#xff0c;自动退出系统并退回到登录界面&#xff0c;想要使用系统&#xff0c;就…

react官网

应急方案 – React 中文文档 (docschina.org) 正版卡死版 Hooks FAQ – React (reactjs.org) 英文流畅版 应急方案 – React 中文网 (nodejs.cn) 盗版流畅版&#xff08;翻译有稍稍的问题&#xff09; http://www.react-cn.com/index.html 黄版

【数据结构】数组和字符串(十三):链式字符串的基本操作(串长统计、查找、复制、插入、删除、串拼接)

文章目录 4.3 字符串4.3.1 字符串的定义与存储4.3.2 字符串的基本操作&#xff08;链式存储&#xff09;1. 结构体2. 初始化3. 判空4. 串尾添加5. 打印6. 串长统计7. 查找8. 复制9. 插入10. 删除11. 串拼接12. 销毁13. 主函数14. 代码整合 4.3 字符串 字符串(String)是由零个或…

Latex排版SIGGRAPH总结(持续总结中...)

本文学习总结自&#xff1a;How to use the ACM SIGGRAPH / TOG LaTeX template 相关文件&#xff1a;百度网盘 首先解压 “my paper” 中的文件&#xff0c;并用Latex打开mypaper.tex. 多行连等公式 \begin{equation}表示编号公式&#xff0c;\[ \]表示无编号公式 无编号\b…

go-zero数据库连接池 database/sql 源码学习

database/sql 中接口的层级关系https://draveness.me/golang/docs/part4-advanced/ch09-stdlib/golang-database-sql/ database/sql源码地址&#xff1a;https://github.com/golang/go/tree/release-branch.go1.17/src/database/sql go-zero数据库连接池源码地址 https://githu…

k8s中 RBAC中,clusterrole,serviceaccount , rolebinding 是什么关系谁先谁后

在Kubernetes的RBAC&#xff08;Role-Based Access Control&#xff09;中&#xff0c;ClusterRole、ServiceAccount和RoleBinding是三个关键的组件&#xff0c;它们之间的关系如下&#xff1a; ClusterRole&#xff1a;ClusterRole 是一种全局的权限规则&#xff0c;它定义了一…

ESP32网络开发实例-使用密码登录Web服务器

使用密码登录Web服务器 文章目录 使用密码登录Web服务器1、软件准备2、硬件准备3、代码实现在本文中,我们将使用 ESP32 和 Arduino IDE 设计一个受密码保护的 Web 服务器。 如果您使用 ESP32 制作了家庭自动化项目并且您正在访问 Web 服务器上的所有信息,并且您希望通过添加密…