文章目录

  • Redis 简介
    • Redis 优势
    • Redis与其他Key-Value存储的异同
  • Redis安装
    • 启动Redis
    • 查看Redis是否启动
  • Redis配置
    • 查看配置项
    • 修改配置项
    • 参数说明
  • Redis数据类型
    • String(字符串)
    • Hash(哈希)
    • List(列表)
    • Set(集合)
    • ZSet(sorted set:有序集合)
  • Redis命令
    • 远程服务上执行命令
  • Redis与Python交互StrictRedis对象方法
    • 安装redis包
    • 调用模块
    • StrictRedis对象操作string类型
      • 框架
      • 增加
      • 获取
      • 获取键值
      • 删除
      • 设置生存周期
      • 查看剩余过期时间(秒)

Redis 简介

Remote Dictionary Server(Redis)是一个由Salvatore Sanfippo写的key-value存储系统。Redis是一个开源的使用ANSI C语言编写,遵守BSD协议,支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是字符串(String),哈希(Hash),列表(list),集合(sets)和有序集合(sorted sets)等类型。

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

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

Redis本质上是一个Key-Value类型的数据库,整个数据库加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘进行保存。

因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过10万次读写操作,是已知性能最快的Key-Value DB。

Redis支持保存多种数据结构,此外单个value的最大限制是1GB,可以用来实现很多有用的功能,比如用List做FIFO双向链表,实现一个轻量级的高性能消息队列服务,用Set做高性能的tag系统等等。

Redis可以对存入的Key-Value设置expire时间,可以作为一个功能加强版的memcached来用。

Redis的主要缺点是数据库容易受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数量的高性能操作和运算上。

Redis 优势

  • 性能极高-Redis能读的速度是110000次/s,写的速度是81000次/s。
  • 丰富的数据类型-Redis支持二进制案例的Strings,Lists, Hashes, Sets及Ordered Sets数据类型操作。
  • 原子-Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  • 丰富的特性-Redis还支持publish/subscibe,通知key过期等等特性。

Redis与其他Key-Value存储的异同

  • Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
  • Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

Redis安装

在Ubuntu系统安装Redis可以使用命令方式:

sudo apt-get update
sudo apt-get install redis-server

启动Redis

redis-server

查看Redis是否启动

redis-cli

以上命令将打开以下终端

redis 127.0.0.1:6379>

127.0.0.1是本机IP,6379是redis服务端口。现在输入PING命令

redis 127.0.0.1:637> ping
PONG

以上说明已经成功安装redis了。

Redis配置

Redis的配置文件位于Redis安装目录下,文件名为redis.conf(Windows下名为redis.windows.conf)。通过CONFIG命令查看或设置配置项。

查看配置项

  • 语法
redis 127.0.0.1:637> CONFIG GET CONFIG_SETTING_NAME
  • 实例
redis 127.0.0.1:6379> CONFIG GET loglevel
1)"loglevel"
2)"notice"
# 获取所有配置项
redis 127.0.0.1:6379> CONFIG GET *

修改配置项

  • 语法
redis 127.0.0.1:6379> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE
  • 实例
redis 127.0.0.1:6379> CONFIG SET loglevel "notice"
OK
redis 127.0.0.1:6379> CONFIG GET loglevel1) "loglevel"
2) "notice"

参数说明

Redis数据类型

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

String(字符串)

string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。

string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。

string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。

redis 127.0.0.1:6379> SET name "runoob"
OK
redis 127.0.0.1:6379> GET name
"runoob"

在以上实例中我们使用了 Redis 的 SET 和 GET 命令。键为 name,对应的值为 runoob。

注意:一个键最大能存储512MB。

Hash(哈希)

Redis hash 是一个键值(key=>value)对集合。

Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

redis 127.0.0.1:6379> DEL runoob
redis 127.0.0.1:6379> HMSET runoob field1 "Hello" field2 "World"
"OK"
redis 127.0.0.1:6379> HGET runoob field1
"Hello"
redis 127.0.0.1:6379> HGET runoob field2
"World"

HMSET 设置了两个 field=>value 对, HGET 获取对应 field 对应的 value。

每个 hash 可以存储 232 -1 键值对(40多亿)。

List(列表)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

redis 127.0.0.1:6379> DEL runoob
redis 127.0.0.1:6379> lpush runoob redis
(integer) 1
redis 127.0.0.1:6379> lpush runoob mongodb
(integer) 2
redis 127.0.0.1:6379> lpush runoob rabitmq
(integer) 3
redis 127.0.0.1:6379> lrange runoob 0 10
1) "rabitmq"
2) "mongodb"
3) "redis"
redis 127.0.0.1:6379>

列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。

Set(集合)

Redis的Set是string类型的无序集合。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
sadd 命令
添加一个 string 元素到 key 对应的 set 集合中,成功返回1,如果元素已经在集合中返回 0,如果 key 对应的 set 不存在则返回错误

sadd key memberredis 127.0.0.1:6379> DEL runoob
redis 127.0.0.1:6379> sadd runoob redis
(integer) 1
redis 127.0.0.1:6379> sadd runoob mongodb
(integer) 1
redis 127.0.0.1:6379> sadd runoob rabitmq
(integer) 1
redis 127.0.0.1:6379> sadd runoob rabitmq
(integer) 0
redis 127.0.0.1:6379> smembers runoob1) "redis"
2) "rabitmq"
3) "mongodb"

注意:以上实例中 rabitmq 添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。

集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。

ZSet(sorted set:有序集合)

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

zset的成员是唯一的,但分数(score)却可以重复。
zadd 命令
添加元素到集合,元素在集合中存在则更新对应score

zadd key score member redis 127.0.0.1:6379> DEL runoob
redis 127.0.0.1:6379> zadd runoob 0 redis
(integer) 1
redis 127.0.0.1:6379> zadd runoob 0 mongodb
(integer) 1
redis 127.0.0.1:6379> zadd runoob 0 rabitmq
(integer) 1
redis 127.0.0.1:6379> zadd runoob 0 rabitmq
(integer) 0
redis 127.0.0.1:6379> > ZRANGEBYSCORE runoob 0 1000
1) "mongodb"
2) "rabitmq"
3) "redis"

Redis命令

Redis命令用于在redis服务上执行操作。
要在redis服务上执行命令需要一个redis客户端。redis客户端在下载的redis的安装包中。

启动 redis 客户端,打开终端并输入命令 redis-cli。该命令会连接本地的 redis 服务。

$redis-cli
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PINGPONG

在以上实例中我们连接到本地的 redis 服务并执行 PING 命令,该命令用于检测 redis 服务是否启动。

远程服务上执行命令

连接到主机为 127.0.0.1,端口为 6379 ,密码为 mypass 的 redis 服务上。

$redis-cli -h 127.0.0.1 -p 6379 -a "mypass"
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PINGPONG

Redis与Python交互StrictRedis对象方法

安装redis包

pip3 install redis

调用模块

from redis import StrictRedis

StrictRedis对象操作string类型

框架

from redis import StrictRedisif __name__ == '__main__':
try:redisbase = StrictRedis(host=redis_sets['ip'], port=redis_sets['port'], db=redis_sets['db'],decode_responses=True)
except Exception as e:
print(e)

增加

redisbase.set(img_name, result)

获取

roi_vals = redisbase.mget(img_list) #获取多个
roi_val = redisbase.get(img_name) #获取单个

获取键值

keys = redisbase.keys()

删除

result = redisbase.delete('img_name')

设置生存周期

redisbase.expire('img_name', 10) #设置生存周期为10s

查看剩余过期时间(秒)

redisbase.ttl('img_name')

参考资料
Redis 教程
redis——相关问题汇总
Python中 redis StrictRedis对象操作string类型
Redis 与 python交互 StrictRedis对象⽅法
使用python检查redis 死键(长时间没有访问的键)
python中redis查看剩余过期时间以及用正则通配符批量删除key的方法

Redis—学习笔记相关推荐

  1. Redis学习笔记 - 数据类型与API(1)Key

    Redis学习笔记 - 数据类型与API(1)Key Key相关命令 1. 常用命令 命令 含义 时间复杂度 keys 查找所有符合给定模式 pattern 的 key O(N), N 为数据库中 k ...

  2. Redis学习笔记~Redis在windows环境下的安装

    Redis是一个key-value的存储系统,它最大的特点就是可以将数据序列化到文件中. redis存储在服务器的内存或者文件中,它不是session,不是cookies,它只是个更安全,更稳定,更可 ...

  3. redis学习笔记-持久化

    redis学习笔记-持久化 前言 redis持久化有两种方式:RDB和AOF.分别对应着全量复制和增量复制.深刻理解各自的实现方式及适用场景对redis的使用和运维十分重要.下面就分别介绍. RDB持 ...

  4. StackExchange.Redis学习笔记(五) 发布和订阅

    StackExchange.Redis学习笔记(五) 发布和订阅 原文:StackExchange.Redis学习笔记(五) 发布和订阅 Redis命令中的Pub/Sub Redis在 2.0之后的版 ...

  5. Redis学习笔记~分布式的Pub/Sub模式

    redis的客户端有很多,这次用它的pub/sub发布与订阅我选择了StackExchange.Redis,发布与订阅大家应该很清楚了,首先一个订阅者,订阅一个服务,服务执行一些处理程序(可能是写个日 ...

  6. Redis学习笔记——SpringDataRedis的使用

    与Spring集成 我需要哪些jar包? <dependency><groupId>org.springframework.data</groupId><ar ...

  7. Redis学习笔记(五)——持久化及redis.conf配置文件叙述

    对于日常使用来说,学习完SpringBoot集成Redis就够我们工作中使用了,但是既然学习了,我们就学习一些Redis的配置及概念,使我们可以更深层次的理解Redis,以及增强我们的面试成功概率,接 ...

  8. Redis学习笔记1-理论篇

    目录 1,Redis 数据类型的底层结构 1.1,Redis 中的数据类型 1.2,全局哈希表 1.3,数据类型的底层结构 1.4,哈希冲突 1.5,rehash 操作 2,Redis 的 IO 模型 ...

  9. Redis学习笔记(实战篇)(自用)

    Redis学习笔记(实战篇)(自用) 本文根据黑马程序员的课程资料与百度搜索的资料共同整理所得,仅用于学习使用,如有侵权,请联系删除 文章目录 Redis学习笔记(实战篇)(自用) 1.基于Sessi ...

  10. Redis学习笔记(B站狂神说)(自己总结方便复习)

    Redis学习笔记B站狂神说 redis: 非关系型数据库 一.NoSQL概述 1.为什么要用Nosql 1.单机Mysql的年代 思考一下,这种情况下:整个网站的瓶颈是什么? 1.数据量如果太大,一 ...

最新文章

  1. Redis为什么变慢了?一文讲透如何排查Redis性能问题 | 万字长文
  2. DEBUGnbsp;设置监视点:判断变量值
  3. Dart是一个怎样的语言?
  4. 零基础也可以实现“机器同传翻译”!
  5. django配置mysql数据库
  6. uni-app实现上传多张照片
  7. Java成神之路技术整理(长期更新)
  8. 网络流专题(完结撒花)
  9. mysql ddl 进度_MySQL DDL详情揭露
  10. 【WPF】自定义GridLineDecorator给ListView画网格
  11. centos6.5 安装mono
  12. 硅谷程序员跳槽排行榜:最爱竟不是 Google 苹果 Facebook!
  13. FISCO BCOS源码(3)线程交互和交易的生命周期
  14. 小D课堂 - 零基础入门SpringBoot2.X到实战_第14节 高级篇幅之SpringBoot多环境配置_59、SpringBoot多环境配置介绍和项目实战...
  15. Atitit 安全流程法 目录 1. 常见等安全措施方法 2 1.1. 安全的语言 代码法,编译型 java 2 1.2. 安全编码法 2 1.3. 安全等框架类库 api 2 1.4. 加密法 2
  16. 中兴盒子ZTE-B860AV1.1T、AV2.1-通刷-线刷固件
  17. spring源码之@dependsOn
  18. jQueryphotoClip-图片上传并裁剪
  19. 我的世界里 有你还不知道的秘密 边走边学习 且行且珍惜吧
  20. 技能梳理24@stm32+阿里云+nbiot+dht11+bh1750+土壤湿度传感器+oled

热门文章

  1. c#解析Josn(解析多个子集,数据,可解析无限级json)
  2. 故障排查:别想甩锅给运维
  3. python 蓝桥杯 门牌制作
  4. 《C++ Primer》第12章 12.3节习题答案
  5. 【工业控制】Wincc是什么?
  6. WinCC -- 创建HMI组态 -- 组态趋势
  7. 情人节特献:有心之函数必然就有分手函数
  8. win7如何连接域控服务器,win7系统创建域控制器的操作方法
  9. 计算机 电子 通信工程试题,烽火通信工程笔试试题
  10. 海豚php源码,基于 ThinkPHP5.1 实现的海豚后台登录源码分析