一、概念

NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”。NoSQL 数据库种类繁多(Redis、Mongodb、HBase、Elasticsearch 等等), 他们一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。无形之间也在架构的层面上带来了 可扩展的能力。NoSQL数据库都具有非常高的读写性能,尤其在大量下数据,更能体现它的优势。这得益于它的无关系性,数据库的 结构简单。

1.1、redis概述

Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库在内存当中进行操作,定期通过异步操作把数据库数 据写到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的KeyValue DB。 Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,不像 memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能。默认16个数据库,类似数组下标是从零开始,初始默认 使用零号库,统一的密码管理,16个库都是同样密码,要么都连上要么一个也连接不上,redis默认端口是6379。

redis的优点:

速度快:因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)

持久化:定期通过异步操作把数据库数据写到硬盘上进行保存

支持丰富数据类型:支持string,list,set,sorted set,hash

支持事务:操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行

丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除

1.2 redies安装

下载好软件,我这里是用绿色压缩包版

解压到相应路径(这里我的路径是H:\Bianyiqi\Tools\redis-latest-windws)

启动客户端和服务端

1.3 测试

1.4 redis图形化管理工具的安装

官方出了RedisDesktopManager-0.9.8版本后要购买了。所以本次我们要使用的就是RedisDesktopManager-0.9.8版本

解压到相应的目录启动即可

2. redis常用命令操作

2.1 redis的数据类型

redis存储的是:key,value格式的数据,其中key都是字符串,value有5种不同的数据结构

2.1.1 字符串类型 string

  • string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value;
  • string类型是二进制安全的。意思是redis的string可以存储任何数据。如图片或者序列化的对象 ;

2.1.2 哈希类型 hash

  • redis的hash 是一个键值对集合;
  • redis hash是一个string类型的field和value的映射表,
  • hash特别适合用于存储对象; 类似Java里面的Map;

2.1.3 列表类型 list

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

也可以作为队列。使用List结构,我们可以轻松地实现最新消息排行等功能。

2.1.4 集合类型 set

redis的set是string类型的无序集合。它是通过HashTable实现的。

2.1.5 有序集合类型 sortedset

  • redis的sortedset和 set 一样也是string类型元素的集合;
  • 不同的是每个元素都会关联一个double类型的分数;
  • redis正是通过分数来为集合中的成员进行从小到大的排序。sortedset的成员是唯一的,但分数(score)却可以重复;

2.2 常用的指令

2.2.1 字符串类型 String

赋值命令:SET key value

解读:如果key不存在创建该key并赋值,返回“OK”,如果该Key已经存在,则覆盖其原有值。返回"OK"。 取值命令:GET key

取值命令:GET key

解读:获取指定 Key 的 Value。如果 key 存在返回对应的 value,如果该 Key 不存在,返回 nill

数字递增:INCR key

解读:将指定 Key 的 Value 原子性的递增1。如果该 Key 不存在,其初始值为0,在 incr 之后其值为1

数字递减:DECR key

解读:将指定 Key 的 Value 原子性的递减1。如果该 Key 不存在,其初始值为0,在 decr 之后其值为-1。操作返回递减后的 value值。

增加指定的整数:INCRBY key increment

解读:将指定Key的Value原子性的增加increment。如果该Key不存在,其初始值为0,在incrby之后其值为increment。操作成 功则返回增加后的value值。

减少指定的整数:DECRBY key decrement

解读:将指定Key的Value原子性的减少decrement。如果该Key不存在,其初始值为0,在decrby之后其值为-decrement。操 作成功则返回减少后的value值。

向尾部追加值:APPEND key value

解读:如果该Key已经存在,APPEND命令将参数Value的数据追加到已存在Value的末尾。如果该Key不存在,APPEND命令将 会创建一个新的Key/Value。返回追加后Value的字符串长度

2.2.2 哈希类型 hash

赋值命令:HSET key field value

解读:为指定的 Key (对象/集合)添加属性并设置值,如果 Key 不存在,该命令将创建新 Key (对象/集合) 以用于存储参数中的 属性对,如果参数中的 Field(属性) 在该 Key 中已经存在,则用新值覆盖其原有值。 返回1表示新的 Field(属性) 被设置了新值, 0表示Field已经存在,用新值覆盖原有值。

取值命令:HGET key field

解读:返回指定 Key (对象/集合)中指定 Field(属性) 的关联值,如果参数中的 Key 或 Field 不存在,返回nilll.

删除字段 :HDEL key field [field ...]

解读:从指定Key (对象/集合)的Hashes Value中删除参数中指定的多个字段,如果不存在的字段将被忽略,返回实际删除的 Field数量。如果Key不存在,则将其视为空Hashes,并返回0。

设置多个字段的值:HMSET key field value [field value ...]

解读:逐对依次设置参数中给出的Field/Value对。如果其中某个Field已经存在,则用新值覆盖原有值。如果Key (对象/集合)不 存在,则创建新Key (对象/集合),同时设定参数中的Field/Value。

获取多个字段的值:HMGET key field [field ...]

解读:获取和参数中指定 Fields 关联的一组 Values,其返回顺序等同于 Fields 的请求顺序。如果请求的 Field 不存在,其值返 回null。

2.2.3 列表类型

list 向列表头部添加元素:LPUSH key value [value ...]

解读:向列表左边添加元素。如果该 Key 不存在,创建一个与该 Key 关联的空链表,之后再将数据从链表的头部插入。操作成 功则返回插入后链表中元素的数量。 654321 向列表

尾部添加元素:RPUSH key value [value ...]

解读:向列表右边添加元素。如果该 Key 不存在,创建一个与该 Key 关联的空链表,之后再将数据从链表的尾部插入。操作成 功则返回插入后链表中元素的数量。 65432178

获得列表:LRANGE key start stop

解读:该命令的参数start和end都是0-based。即0表示链表头部(leftmost)的第一个元素。其中start的值也可以为负值,-1将表 示链表中的最后一个元素,即尾部元素,-2表示倒数第二个并以此类推。该命令在获取元素时,start和end位置上的元素也会被 取出。如果start的值大于链表中元素的数量,空链表将会被返回。如果end的值大于元素的数量,该命令则获取从start(包括 start)开始,链表中剩余的所有元素。注:Redis的列表起始索引为0。显然,LRANGE numbers 0 -1 可以获取列表中的所有元 素。返回指定范围内元素的列表。

列表进行修剪:LTRIM KEY_NAME START STOP

解读:让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。 下标 0 表示列表头部第一个元素,以 1 表示列 表头部的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表尾部的最后一个元素, -2 表示列表的倒数第二个元 素,以此类推。

元素从左边出栈:LPOP key

解读:返回并弹出指定 Key 关联的链表中的第一个元素,即头部元素。如果该 Key 不存在,返回 nil。LPOP 命令执行两步操 作:第一步是将列表左边的元素从列表中移除,第二步是返回被移除的元素值。

元素从右边出栈:RPOP key

解读:返回并弹出指定 Key 关联的链表中的最后一个元素,即头部元素。如果该 Key 不存在,返回 nil。RPOP 命令执行两步操 作:第一步是将列表右边的元素从列表中移除,第二步是返回被移除的元素值。

获取列表中元素的个数:LLEN key

解读:返回指定 Key 关联的链表中元素的数量,如果该 Key 不存在,则返回 0。如果与该 Key 关联的 Value 的类型不是链表, 则返回相关的错误信息。

获取指定索引的元素值:LINDEX key index

解读:该命令将返回链表中指定位置(index)的元素,index 是0-based,表示从头部位置开始第 index 的元素,如果 index 为 -1,表示尾部元素。如果与该 Key 关联的不是链表,该命令将返回相关的错误信息。 如果超出 index 返回这返回 nil。

2.2.4 集合类型 set

增加元素:SADD key member [member ...]

解读:如果在插入的过程用,参数中有的成员在Set中已经存在,该成员将被忽略,而其它成员仍将会被正常插入。如果执行该 命令之前,该Key并不存在,该命令将会创建一个新的Set,此后再将参数中的成员陆续插入。返回实际插入的成员数量。

获得集合中元素个数:SCARD key

解读:返回Set中成员的数量,如果该Key并不存在,返回0

判断元素是否在集合中:SISMEMBER key member

解读:判断参数中指定成员是否已经存在于与Key相关联的Set集合中。返回1表示已经存在,0表示不存在,或该Key本身并不 存在。

获得集合中的所有元素:SMEMBERS key

解读:获取与该Key关联的Set中所有的成员。如果ket不存在返回空集合

从集合中弹出一个元素:SPOP key

解读:随机的移除并返回Set中的某一成员。 由于Set中元素的布局不受外部控制,因此无法像List那样确定哪个元素位于Set的 头部或者尾部。返回移除的成员,如果该Key并不存在,则返回nill。

删除元素:SREM key member [member ...] 

解读:从与Key关联的Set中删除参数中指定的成员,不存在的参数成员将被忽略,如果该Key并不存在,将视为空Set处理。返 回从Set中实际移除的成员数量,如果没有则返回0。

随机获得集合中的元素:SRANDMEMBER key [count]

解读:和SPOP一样,随机的返回Set中的一个成员,不同的是该命令并不会删除返回的成员。还可以传递count参数来一次随机 获得多个元素,根据count的正负不同,具体表现也不同。当count 为正数时,SRANDMEMBER 会随机从集合里获得count个 不重复的元素。如果count的值大于集合中的元素个数,则SRANDMEMBER 会返回集合中的全部元素。当count为负数时, SRANDMEMBER 会随机从集合里获得|count|个的元素,如果|count|大与集合中的元素,就会返回全部元素不够的以重复元 素补齐,如果key不存在则返回nil。

2.2.5 有序集合类型 sorted set

增加元素:ZADD key score member [score] [member]

解读:添加参数中指定的所有成员及其分数到指定key的Sorted Set中,在该命令中我们可以指定多组score/member作为参 数。如果在添加时参数中的某一成员已经存在,该命令将更新此成员的分数为新值,同时再将该成员基于新值重新排序。如果 键不存在,该命令将为该键创建一个新的Sorted Set Value,并将score/member对插入其中。如果该键已经存在,但是与其关 联的Value不是Sorted Set类型,相关的错误信息将被返回。添加成功返回实际插入的成员数量。

获得集合中元素个数:ZCARD key

解读:返回Sorted Set中的成员数量,如果该Key不存在,返回0。

获得指定分数范围内的元素个数:ZCOUNT key min max

解读:该命令用于获取分数(score)在min和max之间的成员数量。

获得元素的分数:ZSCORE key member

解读:如果该成员存在,以字符串的形式返回其分数,否则返回nil。

增加某个元素的分数:ZINCRBY key increment member

解读:该命令将为指定Key中的指定成员增加指定的分数。如果成员不存在,该命令将添加该成员并假设其初始分数为0,此后 再将其分数加上increment。如果Key不存在,该命令将创建该Key及其关联的Sorted Set,并包含参数指定的成员,其分数为 increment参数。如果与该Key关联的不是Sorted Set类型,相关的错误信息将被返回。如果不报错则以串形式表示的新分数。

获得排名在某个范围的元素列表(分数从小到大):ZRANGE key start stop [WITHSCORES]

解读:该命令返回顺序在参数start和stop指定范围内的成员,这里start和stop参数都是0-based,即0表示第一个成员,-1表示 最后一个成员。如果start大于该Sorted Set中的最大索引值,或start > stop,此时一个空集合将被返回。如果stop大于最大索 引值,该命令将返回从start到集合的最后一个成员。如果命令中带有可选参数WITHSCORES选项,该命令在返回的结果中将包含 每个成员的分数值,如value1,score1,value2,score2...。

获得排名在某个范围的元素列表(元素分数从大到小排序):  ZREVRANGE key start stop [WITHSCORES]

解读:该命令的功能和ZRANGE基本相同,唯一的差别在于该命令是通过反向排序获取指定位置的成员,即从高到低的顺序。如 果成员具有相同的分数,则按降序字典顺序排序。

获得指定分数范围的元素(分数从小到大):ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

解读:该命令将返回分数在min和max之间的所有成员,即满足表达式min <= score <= max的成员,其中返回的成员是按照其 分数从低到高的顺序返回,如果成员具有相同的分数,则按成员的字典顺序返回。可选参数LIMIT用于限制返回成员的数量范 围。可选参数offset表示从符合条件的第offset个成员开始返回,同时返回count个成员。可选参数WITHSCORES的含义参照 ZRANGE中该选项的说明。*最后需要说明的是参数中min和max的规则可参照命令ZCOUNT。

获得指定分数范围的元素(元素分数从大到小排序):ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]

解读:该命令除了排序方式是基于从高到低的分数排序之外,其它功能和参数含义均与ZRANGEBYSCORE相同。需要注意的是 该命令中的min和max参数的顺序和ZRANGEBYSCORE命令是相反的。

删除一个或多个元素:ZREM key member [member ...]

解读:该命令将移除参数中指定的成员,其中不存在的成员将被忽略。如果与该Key关联的Value不是Sorted Set,相应的错误 信息将被返回。 如果操作成功则返回实际被删除的成员数量

.

Redis 初解缓存相关推荐

  1. Spring Boot 整合Redis 实现缓存

    本文提纲 一.缓存的应用场景 二.更新缓存的策略 三.运行 springboot-mybatis-redis 工程案例 四.springboot-mybatis-redis 工程代码配置详解 运行环境 ...

  2. 项目总结10:通过反射解决springboot环境下从redis取缓存进行转换时出现ClassCastException异常问题...

    通过反射解决springboot环境下从redis取缓存进行转换时出现ClassCastException异常问题 关键字 springboot热部署  ClassCastException异常 反射 ...

  3. redis一般缓存什么样数据_门户数据展示_Redis缓存数据

    学习主题:门户数据展示_Redis缓存数据 一.Redis_3主3从集群环境搭建 谈单你对读写分离和主从同步的理解 读写分离:Master负责写数据的操作,salve负责读数据的操作 主从同步:sal ...

  4. 高并发简单解决方案————redis队列缓存+mysql 批量入库(ThinkPhP)

    源码地址:https://github.com/Tinywan/PHP_Experience 问题分析 问题一:要求日志最好入库:但是,直接入库mysql确实扛不住,批量入库没有问题,done.[批量 ...

  5. Redis 作为缓存服务器的配置

    转自:http://www.open-open.com/lib/view/open1419670554109.html# 随着Redis的发展,越来越多的架构用它取代了memcached作为缓存服务器 ...

  6. Redis 分布式缓存 Java 框架

    https://dzone.com/articles/java-distributed-caching-in-redis 为什么要在 Java 分布式应用程序中使用缓存? 在提高应用程序速度和性能上, ...

  7. Redis专题-缓存穿透、缓存雪崩、缓存击穿

    一.缓存穿透 缓存穿透概念 缓存穿透是指查询一个一定不存在的数据,在数据库没有,自然在缓存中也不会有.导致用户查询的时候,在缓存中找不到对应key的value,每次都要去数据库再查询一遍,如果从存储层 ...

  8. HAProxy 的负载均衡服务器,Redis 的缓存服务器

    问答社区网络 StackExchange 由 100 多个网站构成,其中包括了 Alexa 排名第 54 的 StackOverflow.StackExchang 有 400 万用户,每月 5.6 亿 ...

  9. Redis 的缓存异常处理 —— 缓存雪崩、缓存击穿、缓存穿透

    Redis 的缓存异常处理 -- 缓存雪崩.缓存击穿.缓存穿透 在实际应用 Redis 过程中,如果将 Redis 作为数据库的缓存,经常会遇到这几个问题:缓存雪崩.缓存击穿.缓存穿透等. 缓存雪崩 ...

最新文章

  1. Matlab与线性代数 -- 寻找矩阵的非零元素
  2. clevo风扇调速软件_YVP变频调速电机
  3. Python基础教程:在for循环搭配else的陷阱,你知道吗?
  4. 对食材的敬畏之心极致产品_这些数据科学产品组合将给您带来敬畏和启发(2020年中的版本)
  5. USB及手机平板设备插拔响应解决方案
  6. Nginx网站根目录更改及导致403 forbidden的问题解决
  7. Atitit Loading 动画效果
  8. 黑马程序员培训没兄弟会高级
  9. 数据库知识整理 - 概述、数据模型、三级模式结构
  10. 常用无损压缩算法原理简析
  11. AndroidQ(八)Android Q隐私:更改相机和连接
  12. 我的Internet路由器可能会磨损吗?
  13. 静态库与动态库(共享库)的联系与区别
  14. Google提出的以用户为中心的度量体系“HEART框架
  15. mpirun 遇到 forrtl: severe (174): SIGSEGV, segmentation fault occurred
  16. 建设智慧城市的十大反思
  17. 铁威马F2-210配西数红盘,不仅是NAS那么简单
  18. 小巧灵敏的驻极体话筒
  19. 前一日函数PreDate(static方法与非static的区别)
  20. 【Jackson】@JsonCreator 注解

热门文章

  1. 恶意软件android,安卓APP恶意软件的安全检测机制
  2. 《Python编程:从入门到实践》 第5章习题
  3. RT-Thread在16届智能车竞赛双车接力组中的应用
  4. CEF3:用CEF3实现最简单的浏览器
  5. 重磅!《新一代人工智能伦理规范》发布丨附全文
  6. FlexRay测试开发实践之诊断刷写
  7. 三星java遗忘的勇士_顺位不高的无名小辈,敢打敢拼的悍将,永不放弃的代表人物!...
  8. 爬取QQ音乐(周杰伦)
  9. VisionFive2 星光板,开发之旅-1
  10. 注册时输入手机号规则