Redis 小结

一、redis简介

  redis是一款基于C语言编写的,开源的非关系型数据库,由于其卓越的数据处理机制(按照规则,将常用的部分数据放置缓存,其余数据序列化到硬盘),大家也通常将其当做缓存服务器来使用。

  在很多时候,大家还认为其只是一个key-value数据库服务器。然而redis还支持多种数据类型的存储,应用范围也更加广泛

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

  redis支持数据持久化(每隔一段时间会将内存中的数据写入粗盘;如果机器故障重启,还可以将硬盘的数据反写会内存),保证了告诉处理数据操作的同事,增加了数据的安全性;同时也支持数据数据库的主从复制、发布订阅、事务支持、管道和虚拟内存

 

二、redis优势

和其他nosql相比,redis的性能会更加卓越;同时,支持排名集合计算,消息队列等操作。

三、redis和memcached的区别

  1、两者都是内存数据库,效率方面差别不大

  2、redis不仅仅支持key-value数据格式,还支持list、set、hash等数据结构的存储

  3、memcached是基于内存的key-value缓存服务器,完全基于内存,如果不考虑异常关机造成数据丢失的情况下,可以考虑;但是redis可以做数据持久化,因而数据安全性方面没有redis做的好

  4、redis可以做故障恢复,将数据从硬盘恢复到内存

  5、redis支持数据备份,即主从备份

四、redis的安装

五、redis数据类型

  1、string字符串

    string是redis最基本的数据类型,存取方便,可以存储一切可以序列化的数据对象,取出后可以反序列化为存储之前的数据对象进行使用

    在实际操作中,通过set存储,get获取;name即为key值,liming为存储对象

    注意:value存储最大数据为512M

    使用场景:常规key-value缓存应用。常规计数: 微博数, 粉丝数。

    

127.0.0.1:6379> set name liming
OK
127.0.0.1:6379> get name
"liming"

  

  2、list列表

    list是数据列表格式,按照顺序插入数据,也可以插入数据到列表的头部或者尾部在实际操作中是通过lpust来存储数据列表。lrange来获取数据列表,取出一个值后,则在当前队列中消失

    基本语法:存储lpush  key value 例如(127.0.0.1:6379> lpush list C#);获取lrange key 查询索引开始  查询索引结束,例如(127.0.0.1:6379> lrange list 0 2)

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

    Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。

    Redis的list是每个子元素都是String类型的双向链表,可以通过push和pop操作从列表的头部或者尾部添加或者删除元素,这样List即可以作为栈,也可以作为队列。

    应用场景:list的应用场景非常多,也是Redis最重要的数据结构之一,比如twitter的关注列表,粉丝列表等都可以用Redis的list结构来实现。

127.0.0.1:6379> lpush list redis
(integer) 1
127.0.0.1:6379> lpush list rabbitMQ
(integer) 2
127.0.0.1:6379> lpush list sql
(integer) 3
127.0.0.1:6379> lpush list C#
(integer) 4
127.0.0.1:6379> lpush list python
(integer) 5
127.0.0.1:6379> lpush list java
(integer) 6
127.0.0.1:6379> lrange 0 2
(error) ERR wrong number of arguments for 'lrange' command
127.0.0.1:6379> lrange list 0 2
1) "java"
2) "python"
3) "C#"

  

  3、hash哈希

    hash 是一种key-value 键值对集合,类似数据字典,通过hmset 来存储,hget来获取

    语法:hmset 哈希名称   key1 value1   key2 value2 ……   例如(127.0.0.1:6379> hmset myhash name1 'licy' name2 'lili' name3 'hanmeimei')

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

    使用场景:存储部分变更数据,如用户信息等。

127.0.0.1:6379> hmset myhash name1 'licy' name2 'lili' name3 'hanmeimei'
OK
127.0.0.1:6379> hget myhash1 name1
(nil)
127.0.0.1:6379> hget myhash  name1
"licy"
127.0.0.1:6379> 

  

  4、set集合

    set集合是一种无序的数据集合,添加用 sadd,获取用smembers,添加成功则返回1,已经存在则返回0,添加失败则返回错误信息

    语法:存储  sadd 集合名称  数据值(例如:127.0.0.1:6379> sadd myset redis) ;获取smembers 集合名称(例如:127.0.0.1:6379> smembers myset)

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

    应用场景:求交集;求差集;求并集;获取某时间段内的数据去重

127.0.0.1:6379> sadd myset redis
(integer) 1
127.0.0.1:6379> sadd myset C#
(integer) 1
127.0.0.1:6379> sadd myset java
(integer) 1
127.0.0.1:6379> sadd myset python
(integer) 1
127.0.0.1:6379> smembers myset
1) "java"
2) "C#"
3) "redis"
4) "python"

  

  5、zset有序集合

    zset是一种有序集合,和string类似,多了个增加分数,获取时会按照分数小到大进行数据返回

    key值是唯一的,但是分数可以重复

    语法:存储  zadd 集合名词  分数  数据值 (例如:127.0.0.1:6379> zadd myzset2  3 sql);获取 ZRANGEBYSCORE 集合名称  索引开始  索引结束(例如:127.0.0.1:6379> ZRANGEBYSCORE myzset2 0 10)

    应用场景:显示最新的列表数据项目;排行榜应用获取top N操作;求交集;求差集;求并集;获取某时间段内的数据去重

127.0.0.1:6379> zadd myzset2  3 sql
(integer) 1
127.0.0.1:6379> zadd myzset2  1 C#
(integer) 1
127.0.0.1:6379> zadd myzset2  2 python
(integer) 1
127.0.0.1:6379> zadd myzset2  0 redis
(integer) 1
127.0.0.1:6379> ZRANGEBYSCORE myzset2 0 10
1) "redis"
2) "C#"
3) "python"
4) "sql"
127.0.0.1:6379> 

  

六、redis功能

  1、发布订阅

    redis的发布订阅是一种消息通讯模式,发布者发送消息,接收这接受消息,客户端可以任意定义频道,redis客户端可以任意订阅频道

    

下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:

pubsub1

当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:

pubsub2

实例:订阅者

127.0.0.1:6379> SUBSCRIBE fabu1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "fabu1"
3) (integer) 1
1) "message"
2) "fabu1"
3) "my fa bu "

  发布者

127.0.0.1:6379> PUBLISH fabu1 'my fa bu '
(integer) 1
127.0.0.1:6379> 

  2、持久化

  由于redis的数据是存放在内存中,如果没有持久化,redis重启或者服务器重启数据会丢失,于是需要开启redis的持久化功能,用于将数据保存在硬盘上,当redis重启后,可以从硬盘中恢复数据。

  redis提供两种方式进行持久化,一种是RDB持久化(原理是将redis中在内存中的数据记录定时dump到硬盘上的RDB持久化),另一种是AOD持久化(原理是将redis的操作日志以追加的方式写入文件)

  3、redis的主从复制

  一般来说,一台redis可以处理的数据是有限的,即使硬件支持很好,也无法满足日益增长的业务需求,因而redis提供了主从集群的功能,可以实现读写分离,极大限度的提高了系统的性能和满足业务的拓展。同时,为了避免一台redis服务器宕机而引起的系统崩溃,redis也提供了启用sentinel(哨兵)服务,在一台服务器宕机是自动切换到另外一台从服务器,同时设置当前的从服务器为主服务器

  4、redis事务

  在系统中,经常会遇到很多零散的操作有很强的顺序性,一旦中间某个操作异常或者服务器异常等其他情况,因而就需要事务来处理

  redis事务可以一次执行多个命令,redis会将事务中的命令序列化,然后按照顺序执行。redis事务不可能在事务执行的过程中插入另外一个客户端发来的命令请求,这样便保证了命令执行的过程中进行隔离单独执行。在redis事务中,要么执行所有命令要么一个都不执行

  一个事务从开始到执行共有三个阶段

    a、事务开始

    b、命令入列

    c、执行事务

  5、redis管道

  6、redis虚拟内存

七、redis总结

redis是高性能的缓存服务器解决方案,可以数据持久化和快速搭建集群,高并发,高可用性

参考地址http://www.cnblogs.com/caokai520/p/4409712.html

转载于:https://www.cnblogs.com/happygx/p/8411134.html

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

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

相关文章

NetBeans Java EE技巧#1 –数据库中的实体类

NetBeans IDE是开发各种应用程序的绝佳选择。 具体来说,我每天都使用它来开发和维护Java EE应用程序。 在过去的几个发行版中,不仅Java EE的生产力提高了,而且NetBeans IDE还减少了开发应用程序的时间……使Java EE和NetBeans成为绝配&#x…

asp mysql添加数据_ASP:ado.net 实例向数据库添加数据。

我在这使用的是老师给的数据库1,web窗体设计。设计添加图书窗体,窗体属性有图书种类(下拉列表框控件),图书名称,作者,编号,出版社,价格均为文本框,日期(第三方日期控件),…

spring jmx_JMX和Spring –第1部分

spring jmx这是三篇文章的第一篇&#xff0c;这三篇文章将展示如何通过JMX支持为Spring应用程序赋能。 Maven配置 这是用于设置此示例代码的Maven pom.xml&#xff1a; <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/20…

JAVA有percentile函数吗_Python numpy.percentile函数方法的使用

numpy.percentilenumpy.percentile(a, q, axisNone, outNone, overwrite_inputFalse, interpolationlinear, keepdimsFalse) [source]计算沿指定轴的数据的第q个百分位数。返回数组元素的第q个百分点。参数 &#xff1a;a &#xff1a;array_like输入数组或可以转换为数组的…

JS制作日历小事件和数码时钟--JavaScript实例集锦(初学)

运用JS的innerHTML&#xff0c;和for循环实现日历小部件内容和日期的转换。 <!DOCTYPE html> <html> <head><title>日历小部件</title><style type"text/css">*{padding: 0;margin:0;}.tab{width:220px;background: #ccc;height…

Django-认证系统

知识预览 COOKIE 与 SESSION用户认证 回到顶部COOKIE 与 SESSION 概念 cookie不属于http协议范围&#xff0c;由于http协议无法保持状态&#xff0c;但实际情况&#xff0c;我们却又需要“保持状态”&#xff0c;因此cookie就是在这样一个场景下诞生。 cookie的工作原理是&…

使用JBoss Fuse和OpenShift进行Cloud Native Camel骑行

红帽公司最近发布了一个微服务集成工具包&#xff0c;用于在OpenShift v3的Docker和Kubernetes环境中运行我们的微服务。 为了帮助人们更好地理解这一点&#xff0c;我将Rider Auto应用程序迁移到一组微服务中&#xff0c;该应用程序已经存在了一段时间&#xff0c;该应用程序用…

Spark1——介绍

1、Spark是什么 Spark是一个用来实现快速而通用的集群计算的平台。 2、Spark是一个大一统的软件栈 Spark项目包含多个紧密集成的组件。首先Spark的核心是一个对由很多计算任务组成的、运行在多个工作机器或者是一个计算集群上的应用进行调度、分发以及监控的计算引擎。 Spark的…

java按输入顺序输出_java 输入3个数a,b,c,按大小顺序输出的实例讲解

java 输入3个数a,b,c&#xff0c;按大小顺序输出的实例讲解题目&#xff1a;输入3个数a,b,c&#xff0c;按大小顺序输出。代码&#xff1a;import java.util.Scanner;public class lianxi34 {public static void main(String[] args) {Scanner s new Scanner(System.in);Syste…

Java 8中HotSpot选项的改进文档

Oracle的 Java 8 的HotSpot实现中引入的一些小但受欢迎的功能之一是在启动器的文档中添加了许多常见的HotSpot Java启动器 &#xff08; java &#xff09;选项/标志。 过去&#xff0c;即使是对某些相当常见的HotSpot JVM选项也感兴趣的开发人员 &#xff0c;不得不潜在地寻找…

sql server数据库课程设计分析

课题&#xff1a;能源管理收费系统 系统功能的基本要求&#xff1a; &#xff08;1&#xff09;用户基本信息的录入&#xff1a;包括用户的单位、部门、姓名、联系电话、住址 &#xff1b; &#xff08;2&#xff09;用户水、电、气数据的录入&#xff08;每个月的数据的录入&a…

[BZOJ4537][Hnoi2016]最小公倍数 奇怪的分块+可撤销并查集

4537: [Hnoi2016]最小公倍数 Time Limit: 40 Sec Memory Limit: 512 MBSubmit: 1474 Solved: 521[Submit][Status][Discuss]Description 给定一张N个顶点M条边的无向图(顶点编号为1,2,…,n)&#xff0c;每条边上带有权值。所有权值都可以分解成2^a*3^b的形式。现在有q个询问&…

全新资源素材站源码 功能齐备 界面干净整洁

源码介绍 简单安装说明&#xff1a; 1、整站程序上传后台 2、然后导入数据库文件到数据库&#xff0c; 3、修改conf里面的conf的数据库名字及密码 4、配置伪静态 规则&#xff1a; location ~* \.(htm)$ { rewrite "^(.*)/(.?).htm(.*?)$" $1/index.php?$2…

jBPM和Drools工作台中的用户和组管理

介绍 本文讨论了一项新功能&#xff0c;该功能允许使用集成在jBPM和Drools Workbenches中的直观友好的用户界面来管理应用程序的用户和组。 用户和组管理 在安装&#xff0c;设置和使用此功能之前&#xff0c;本文讨论了一些以前的概念&#xff0c;需要进一步理解才能进一步使…

亿联本科java_厦门亿联2018面试题

一、选择器public class EqTest {public static void main(String[] args) {EqTest e new EqTest();}public EqTest() {String s "Java";String s2 "java";//if (s.equalsIgnoreCase(s2)){System.out.println("相等");} else {System.out.pri…

如何将云持久存储添加到JBoss Cool Store

我们一直在讨论为什么应用程序开发人员在App Dev Cloud Stack系列中不能再忽略其堆栈了。 带有JBoss Cool Store的App Dev Cloud 上个月&#xff0c;我们提供了一个完整的零售示例&#xff0c;其中的JBoss Cool Store运行在您的堆栈的OpenShift Enterprise层上&#xff0c;由…

mysql 表单属性_php表单常用属性有什么?

程序开发中&#xff0c;必不可少的会使用到form表单&#xff0c;以前只是在前端开发时简单使用&#xff0c;对它的属性不甚了解&#xff0c;最近在后端学习中&#xff0c;不断接触到它的属性,现记录一二。下面本篇文章给大家介绍php表单常用的5个属性。actionaction规定了提交表…

i219 2012驱动_2012年I / O之后

i219 2012驱动从注册到赠品&#xff0c;每年的I / O疯狂都在不断发展。 在今年20分钟内被出售&#xff0c;并没有阻止Google赠送更多的东西。 以这种速度并有望在明年发布Google Glass&#xff0c;明年注册很可能会变得更加混乱&#xff01; 因此&#xff0c;Google&#xff0c…

java的sql的like_[Java教程]SQL like 模糊查询, in

[Java教程]SQL like 模糊查询, in0 2018-09-14 11:00:38​[{"互联网":["网络媒体","微博","墨迹天气","河北天气","其他"]},{"气象部门":["灾害大典","灾情普查","灾情直报&q…

惠而浦:使用Netty和Kafka的微服务

介绍 在上一个博客中 &#xff0c;我介绍了Netty用作Web服务器。 该示例运行良好……只要需要广播服务器即可。 大多数情况下不是很有用。 更有可能的是&#xff0c;每个客户端仅接收针对其的数据&#xff0c;并保留了特殊情况下的广播&#xff0c;例如“服务器在15分钟内停机…