Redis学习笔记

 

目录

什么是Redis?

为什么要有Redis?

怎么用Redis?

1、Redis安装卸载以及连接

Window上安装Redis

Redis的客户端

在Windows上卸载Redis

Linux上安装Redis

2、Redis基本操作命令

1) 沟通命令,查看状态

2) 查看当前数据库中key的数目:dbsize

 3) redis默认使用16个库

4) 切换库命令:select dbIndex 

 5) 删除当前库的数据:flushdb  

3、Redis操作key的命令

1)keys 查找key

2)exists key  判断key是否存在

3)expire key seconds 设置key的生存时间

4)ttl key 返回key的剩余生存时间

5)type key 查看key所存储的值的数据类型

 6)del key删除key

4、Redis操作字符串类型(string)值value的命令

 1)set key value

2)get key

5、Redis操作哈希类型hash值value的命令 

1)hset key field value

2)hget key(hash表名) field 

3)hmset key field value [field value…]

4)hmget key field [field…]

5) hgetall key

7)hdel key field [field...]

6、Redis操作列表list值value的命令 

1)lpush key value [value...]

 2)rpush key value [value...]

7、Redis操作集合类型set值value的命令  

1)sadd key member [member…]

2)smembers key

3)sismember key member

4)srem key member [member…]

8、Redis操作有序集合类型 zset (sorted set)  值vaue的命令

1)zadd key score member [score member…]

2)zrange key start stop [WITHSCORES] 

9、Redis事务 

 1) multi

2)exec

3)discard 

4)watch key [key ...]

5)unwatch

6)事务的正常执行

7)事务执行exec之前,入队命令错误

8)事务队列中有执行错误的命令,不会回滚

9)放弃事务 

10)Redis的watch机制

10、Jedis操作Redis

1)下载Jedis和Commons-Pool


什么是Redis?

1、数据库分为两个类型:

        关系型数据库。如MySQL、Oracle等。

        非关系型数据库NoSQL。如redis等。

在非关系型数据库NoSQL数据库中数据之间是无联系的,无关系的。数据的结构是松散的,可变的。

2、Remote Dictionary Server(Redis)是一个开源的使用 C语言编写、支持网络、可基于内存亦可持久化的Key-Value数据库。 Key字符类型,其值(value)可以是字符串(String), 哈希(Map),列表(list), 集合(sets) 和有序集合(sorted sets)等类型,每种数据类型有自己的专属命令。所以它通常也被称为数据结构服务器。通过key找到对应存储的值value。

3、和memcached一样,为了保证效率,数据都是缓存在内存中的,所以Redis常常被用作缓存用,用户访问的数据如果在redis缓存中有就直接返回,redis没有才从数据库中查出,减少数据库的io操作。

为什么要有Redis?

互联网应用的特点(QQ微信等):

  1. 访问量大
  2. 数据量多
  3. 高并发
  4. 高可用

随着互联网应用的崛起,原本的关系型MySQL数据库难以面对互联网应用的这些特点,所以诞生了非关系型数据库Redis。

关系型数据库(MySQL)的瓶颈:

  • 1)无法应对每秒上万次的读写请求,无法处理大量集中的高并发操作。关系型数据的IO密集的应用。硬盘IO也变为性能瓶颈
  • 2)无法简单地通过增加硬件、服务节点来提高系统性能。数据整个存储在一个数据库中的。多个服务器没有很好的解决办法,来复制这些数据。
  • 3)关系型数据库大多是收费的,对硬件的要求较高。软件和硬件的成本花费比重较大。
  • 4)关系型数据库的列数是有限制的,好像最多只能有一千多。而且行数越多的,查询速度也就越慢,所以无法面对海量数据,速度太慢了。

Redis的优势:

1、大数据量,高性能

NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。关系型数据库(例如MySQL)使用查询缓存。这种查询缓存在更新数据后,缓存就是失效了。在频繁的数据读写交互应用中。缓存的性能不高。NoSQL的缓存性能要高的多

2、灵活的数据模型

NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。尤其在快速变化的市场环境中,用户的需求总是在不断变化的。

3、高可用

一台服务器出故障了,会有另一台服务器顶上。

4、低成本

这是大多数分布式数据库共有的特点,因为主要都是开源软件,没有昂贵的License成本。

Redis的劣势:

(1) 不支持标准的SQL,没有公认的NoSQL标准

(2) 没有关系型数据库的约束,大多数也没有索引的概念

(3) 没有事务,不能依靠事务实现ACID。

(4) 没有丰富的数据类型(数值,日期,字符,二进制,大文本等)

ACID,是指数据库管理系统DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。

怎么用Redis?

1、Redis安装卸载以及连接

Window上安装Redis

Windows版本的Redis是Microsoft的开源部门提供的Redis。而不是原Redis作者开发的那个,原Redis只能运行在Linux系统上。

windows版本的Redis适合开发人员学习使用,就可以不用启动虚拟机占用资源了,生产环境中使用Linux系统上的Redis。

 第一步:先下载Redis安装包

windows版本:Redies安装包

.msi 为安装版本,安装过程中自动配置,一路next,环境变量等自动配置。

 .zip 为压缩版本,安装过程中手动配置,需要自己配置环境变量等。

第二步:安装

 下载的Redis-x64-xxx.zip 解压后,放到某个目录(例如d:\tools\),即可使用,类似tomcat。

第三步:启动Redis

双击D:\develop\Redis-x64-xxx中的redis-server.exe

看到这个说明安装成功。

 第四步:关闭Redis

按ctrl+c 退出Redis服务程序。

Redis的客户端

        Redis客户端是一个程序,通过网络连接到Redis服务器,在客户端软件中使用Redis可以识别的命令,向Redis服务器发送命令,告诉Redis想要做什么。Redis把处理结果显示在客户端界面上。通过Redis客户端和Redis服务器交互。

        就像navicat就是一个客户端程序软件,可以连接mysql、oracle等数据库,进行交互。

 redis远程客户端 Redis Desktop Manager

链接:https://pan.baidu.com/s/13NRpOpTkUIiQJRI9aXJ_Iw 
提取码:27vq

下载完Redis的客户端,我们现在要进行连接了。

但是有一个注意的是:Redis安装完默认只有安装了Redis的服务器本机才可以连接访问,其他网络中的服务器不能访问,想要访问的话,就得通过redis.conf文件修改Redis的安全策略以及绑定的ip,还要关闭Redis所在服务器的防火墙。

redis.conf:

改完redis.conf的配置文件后,以后每次启动redis服务都要指定上这个配置文件的路径,让redis启动的时候使用配置文件的配置信息,启动redis的命令:

/redishome/redis-server.exe   */redis.conf &(配置文件的路径)

连接redis:

默认有16个数据库

在Windows上卸载Redis

执行以下两个命令,然后删除和Redis有关的所有文件。

Linux上安装Redis

2、Redis基本操作命令

redis默认为16个库 (在redis.conf文件可配置,该文件很重要,后续很多操作都是这个配置文件) redis默认自动使用0号库

1) 沟通命令,查看状态

redis >ping 返回PONG

解释:双击redis-cli.exe使用redis自带的输入ping,redis给我们返回PONG,表示redis服务运行正常。

2) 查看当前数据库中key的数目:dbsize

语法:dbsize

作用:返回当前数据库的 key 的数量。

 3) redis默认使用16个库

Redis默认使用16个库,从0到15。 对数据库个数的修改,在redis.conf文件中databases 16

4) 切换库命令:select dbIndex 

 5) 删除当前库的数据:flushdb  

3、Redis操作key的命令

1)keys 查找key

语法:keys pattern

作用:查找所有符合模式pattern的key. pattern可以使用通配符。

通配符:

*:表示0-多个字符,例如:keys * 查询所有的key。

?:表示单个字符,例如:wo?d , 匹配 word , wood

例1:显示所有的key

例2:使用 *表示0或多个字符

例3:使用?表示单个字符 

2)exists key  判断key是否存在

语法:exists key [key…]

作用:判断key是否存在

返回值:整数,存在key返回1,其他返回0.使用多个key,返回存在的key的数量。

例1:检查指定key是否存在

例2:检查多个key存在几个

3)expire key seconds 设置key的生存时间

语法:expire key seconds

作用:设置key的生存时间,超过时间,key自动删除。单位是秒。

返回值:设置成功返回数字 1,其他情况是 0 。

例1:设置红灯的倒计时是10秒

4)ttl key 返回key的剩余生存时间

语法:ttl key

作用:以秒为单位,返回key的剩余生存时间(ttl: time to live)

返回值情况:

 -1 :没有设置key的生存时间, key永不过期。

-2:key不存在

数字:key的剩余时间,秒为单位

5)type key 查看key所存储的值的数据类型

语法:type key

作用:查看key所存储值的数据类型

返回值:字符串表示的数据类型

⚫ none (key不存在)

⚫ string (字符串)

⚫ list (列表)

⚫ set (集合)

⚫ zset (有序集)

⚫ hash (哈希表)

例1:查看存储字符串的key:good

 6)del key删除key

语法:del key [key…]

作用:删除存在的key,不存在的key忽略。

返回值:数字,删除的key的数量。

例1:删除指定的key

4、Redis操作字符串类型(string)值value的命令

字符串类型是Redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数

据,序列化后的数据,JSON格式数据,文本,数值。最大能存储512M。

 1)set key value

给key设置值,存储value值

注意:

向已经存在的key设置新的value,会覆盖原来的值

2)get key

获取key对应存储的value 

5、Redis操作哈希类型hash值value的命令 

前面说了Redis是Key-Value数据库,key是string,value可以是string、hash、list、set等,这里介绍的是hash,每种类型的value都有属于自己的命令。

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

1)hset key field value

语法:hset key field value

类似Java中的:Map<String,Map<String,value>>

第一次执行以上命令的话,是创建存储值类型为hash的key-value,是创建hash表,并往hash表中添加数据field-value。

返回值:

①如果field是hash表中新field,则添加field-value,返回1

②如果field已经存在,旧值覆盖新值,返回0

key是string:website        value是hash

 

2)hget key(hash表名) field 

语法:hget key field

作用:获取哈希表 key 中给定域 field 的值

返回值:field域的值,如果key不存在或者field不存在返回nil

3)hmset key field value [field value…]

语法:hmset key field value [field value…]

说明:同时将多个 field-value (域-值)设置到哈希表 key 中,此命令会覆盖已经存在的field,

hash表key不存在,则创建空的hash表。

可以往原有的hash表中同时添加多个值,也可以创建新的hash表同时添加多个值。

返回值:设置成功返回ok,如果失败返回一个错误

4)hmget key field [field…]

语法:hmget key field [field…]

作用:根据key获取对应的hash表中的 中一个或多个给定field域对应的值

返回值:返回和field顺序对应的值,如果field不存在,返回nil

5) hgetall key

根据key获取对应存储的hash表

7)hdel key field [field...]

根据key删除对应的hash中field对应的值。

6、Redis操作列表list值value的命令 

key是String类型,value是list类型。

Redis列表是简单的字符串列表,列表中的值是可重复的,按照插入顺序排序,是有序的。类似Java中的list。

1)lpush key value [value...]

往key对应的list中添加一个或多个值,从左边开始加入值,从左到右的顺序依次插入到表头。

返回值:数字,新列表的长度

从左边开始加入值:

 

 可重复的:

 2)rpush key value [value...]

往key对应的list中添加一个或多个值,从右边开始加入值,从右到左的顺序依次插入到表头。

返回值:数字,新列表的长度

7、Redis操作集合类型set值value的命令  

key是String类型的,value是set类型的。

redis的Set是string类型的无序集合,集合中的数据是唯一的,即集合中不能出现重复的数据

1)sadd key member [member…]

往key存储的set无序集合中添加一个数据member或多个数据member,若添加的数据member已经存在了,则不会被添加进去。

返回值:加入到集合的新元素的个数。不包括被忽略的元素。

2)smembers key

查看key存储的set集合

3)sismember key member

查看member是否是key的对应的set集合中的成员。

返回值:member是集合成员返回1,其他返回 0

4)srem key member [member…]

语法:srem key member [member…]

删除key对应的set中的数据member

返回值:数字,成功删除的元素个数,不包括被忽略的元素。

8、Redis操作有序集合类型 zset (sorted set)  值vaue的命令

key是string类型,value是zset集合。

redis 有序集合zset和集合set一样也是string类型元素的集合,且不允许重复的成员。

不同的是zset集合中的数据都是有序的。

zset的每个元素都会关联一个分数(分数可以重复),redis通过分数来为集合中的成员进行从小到大的排序。

数据有序且不重复。

1)zadd key score member [score member…]

命令:zadd key score member [score member…]

往key对应的zset中添加一个或多个数据member,score可以是整数或浮点数,用于zset中的成员进行排序。

按分数排序:

2)zrange key start stop [WITHSCORES] 

语法:zrange key start stop [WITHSCORES]

作用:查询key对应的zset有序集合的指定区间的内的元素。集合成员按score值从小到大来排序。start, stop都是从0开始。0是第一个元素,1是第二个元素,依次类推。以 -1表示最后一个成员,-2 表示倒数第二个成员。WITHSCORES选项让score和value一同返回。

返回值:自定区间的成员集合

9、Redis事务 

        事务是指一系列操作步骤,这一系列的操作步骤,要么完全地执行,要么完全地不执行。         

        Redis中的事务(transaction)是一组redis命令的集合,至少是两个或两个以上的命令,redis事务保证这些命令被执行时中间不会被任何其他操作打断。

 1) multi

语法: multi

作用:标记一个事务的开始。表示我要开始将命令放到事务队列了。事务内的多条命令会按照先后顺序被放进一个队列当中。

返回值:总是返回ok

2)exec

语法:exec(execute)

作用:执行所有事务队列内的命令

返回值:事务内的所有执行语句内容,事务被打断,返回nil

3)discard 

语法:discard

作用:取消事务,放弃执行事务块内的所有命令

返回值:总是返回ok 

4)watch key [key ...]

语法:watch key [key ...]

作用:监视一个(或多个) key是否被其他事务所改动 ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

返回值:总是返回ok

5)unwatch

语法:unwatch

作用:取消 WATCH 命令对所有 key 的监视。如果在执行 WATCH 命令之后, EXEC 命令或 DISCARD 命令先被执行了的话,那么就不需要再执行 UNWATCH 了

返回值:总是返回ok

6)事务的正常执行

 事务的执行步骤:首先开启事务,其次向事务队列中加入命令,最后执行事务提交。

1)multi:用multi命令告诉Redis,接下来要执行的命令你先不要执行,而是把它们暂时存起来(开启事务)

2)sadd workers john第一条命令进入等待队列(命令入队)

3)sadd workers rose 第二条命令进入等待队列(命令入队)

4)smembers workers 第三条命令进入等待队列(命令入队)

5)...............

6)exce告知redis执行前面发送的命令(提交事务)

7)事务执行exec之前,入队命令错误

事务执行exec之前,入队的命令有错误,Redis会检测到错误,然后自动终止事务的执行,放弃事务。  

8)事务队列中有执行错误的命令,不会回滚

在exec执行后的所产生的错误,即使事务中有某个/某些命令在执行时产生了错误,事务中的其他命令仍然会继续执行。

Redis 事务中如果有执行时错误不进行回滚,而是继续执行余下的命令。一方面是为了效率高,回滚的话,需要将旧值保存起来,有错误时回滚到旧值,这样效率就低了。另一方面,Redis认为这些执行时错误应该在开发测试的时候就被发现,不应该出现在生产环境中。Redis的事务只能保证你事务中的命令一定会被执行。

9)放弃事务 

执行步骤:

1) MULTI 开启事务

2) SET age 25 命令入队

3) SET age 30 命令入队

4) DISCARD 放弃事务,则事务队列中的命令不会被执行

10)Redis的watch机制

WATCH机制原理:

        WATCH机制:使用WATCH监视一个或多个key , 跟踪key的value修改情况,如果有

key的value值在事务EXEC执行之前被修改了,整个事务被取消。EXEC 返回提示信息,表示事务已经失败。

        WATCH机制使的事务EXEC变的有条件,事务只有在被WATCH的key没有修改的前提下才能执行。不满足条件,事务被取消。使用 WATCH 监视了一个带过期时间的键,那么即使这个键过期了,事务仍然可以正常执行

10、Jedis操作Redis

        redis的Java编程客户端,Redis官方首选推荐使用Jedis,jedis是一个很小但很健全的

redis的java客户端。通过Jedis可以像使用Redis命令行一样使用Redis。

1)下载Jedis和Commons-Pool

Jedis是Redis的java客户端。 Maven依赖:

<dependency>  
    <groupId>redis.clients</groupId>  
    <artifactId>jedis</artifactId>  
    <version>2.9.3</version> 
</dependency>

Jedis对象并不是线程安全的,在多线程下使用同一个Jedis对象会出现并发问题。为了避免每次使用Jedis对象时都需要重新构建,Jedis提供了JedisPool。JedisPool是基于

Commons Pool 2实现的一个线程安全的连接池。

<dependency>  
    <groupId>org.apache.commons</groupId>  
    <artifactId>commons-pool2</artifactId>  
    <version>2.6.0</version> 
</dependency>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

躺着听Jay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值