JavaWeb开发之redis知识总结

Posted nuist__NJUPT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb开发之redis知识总结相关的知识,希望对你有一定的参考价值。

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

Redis是 NoSQL技术阵营中的一员,它通过多种键值数据类型来适应不同场景下的存储需求,借助一些高层级的接口使用其可以胜任,如缓存、队列系统的不同角色

Redis的官网: https://redis.io/

目录

1、Redis的特性

2、redis的安装

3、redis客户端测试

4、redis常用数据类型之string

5、redis常用数据类型之list

6、redis常见数据类型之hash

​7、redis常见数据类型之set

8、redis常用数据类型sortedSet

9、redis中key的通用操作

10、redis事务


1、Redis的特性

  1. Redis 与其他 key - value 缓存产品有以下三个特点:
  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。
  1. Redis 优势
  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

Redis原生只支持linux系统

Redis官方是不支持windows平台,windows版本是微软自己建立的分支,基于官方的redis源码上进行编译、发布、维护的,所以window平台上的redis版本都略低于官方版本。

2、redis的安装

此处需要拥有linux基础,因为是在linux环境下安装redis,首先去官网下载安装包并解压,解压后使用xftp5软件将redis安装包从window上传到linux,然后使用xshell5远程连接linux,并在命令行输入以下命令,完成安装。

第一步:将redis.tar.gz解压      tar -zxvf redis-3.2.8.tar.gz

第二步:进入redis-3.2.8目录      cd redis-3.2.8

第三步:对redis进行编译           make

第四步:安装到指定的目录        make PREFIX=/usr/local/redis install

注意:如果安装redis是报下面的错误,是因为系统没有安装gcc环境,缺少依赖

解决方案,安装完成后,对redis进行重新编译安装

3、redis客户端测试

redis在linux系统下安装成功后,需要进行客户端测试连接。

第一步:启动redis服务

注意:我们需要将redis编译后的目录 中的redis.conf文件copy到我们自己的redis目录中。

这个redis.conf文件是redis的配置文件。注意:前面是redis-server服务,后面redis.conf配置文件。

 第二步:Redis占用的端口是6379,新建一个连接,可以通过redis-cli命令行客户端来测试redis是否启动成功。如下:出现PONG,代表连接redis成功。

 4、redis常用数据类型之string

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。

 字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。

1)SET key value设置key持有字符串和GET key得到key的字符串

 2)meset和mget一次存取多个值 

3)setnx操作:如果key不存在,相当于set,若key存在,不做任何操作

4)msetnx依次给keys传多个值,key必须都不存在,原子性操作,若存在,则不执行

5)append指令,若key存在则直接向原来得后面追加,若key不存在,则相当于set

6)decr原子性递减1,incr是原子性递增1

7)获取原来的key,并为key设置新的值

8)setrange表示从哪个位置开始对key进行修改,返回修改后的长度

 

9)getrange表示得到key从star开始t到end位置结束的值

5、redis常用数据类型之list

在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。List中可以包含的最大元素数量是4294967295。从元素插入和删除的效率视角来看,如果我们是在链表的两头插入或删除元素,这将会是非常高效的操作,即使链表中已经存储了百万条记录,该操作也可以在常量时间内完成。然而需要说明的是,如果元素插入或删除操作是作用于链表中间,那将会是非常低效的。

1)lpush和lrange分别是向list中插入和查找元素

2)lpushx在已有的list头部插入元素,若list不存在,则插入失败

3)lpop弹出list中的头部第一个元素

4)llen得到list的长度 

5) lrem将链表的count=1个元素value=3移除 

5)lset将下标index=3的位置值替换为值value=100

6)获取list中索引index=3的值

7)ltrim保留指定范围内的元素,其余元素删除

8)linsert在指定元素之前或者之后插入新元素

9)rpush表示从元素的尾部进行插入

10)rpop将元素从尾部弹出

11)rpoplpush将第一个key的尾部元素移除并插入到第二个key的头部

6、redis常见数据类型之hash

Redis中的Hashes类型可以看成具有String Key和String Value的map容器。所以该类型非常适合于存储值对象的信息。如用户信息:Username、Password和Age等。每一个Hash可以存储4294967295个键值对。

1)hset和hget操作,分别为为指定的Key设定Field/Value对,和得到key对应Filed 的value

2) hestnx也是为指定的Key设定Field/Value对,仅当field或key不存在的时候可以设置成功

3)hexists判断field是否存在

4)hlen计算hash的key的长度,即获取该Key所包含的Field的数量

5)hdel从指定Key的Hashes Value中删除参数中指定的多个字段

6)hincrby增加指定Key中指定Field关联的Value的值

7)hgetall得到key中所有的field/value

8)hmset和hmget操作可以添加多个field/value和获取多个field对应的value 


 

7、redis常见数据类型之set

在Redis中,我们可以将Set类型看作为没有排序的字符串集合。Set可包含的最大元素数量是4294967295。Set类型在功能上还存在着一个非常重要的特性,即在服务器端完成多个Sets之间的聚合计算操作,如unions、intersections和differences。由于这些操作均在服务端完成,因此效率极高,而且也节省了大量的网络IO开销。

1)sadd是添加元素,不含重复元素,smembers为查询set中的所有元素

2) scard获取set集合中元素数量

3) sismeber判断元素是否存在

 4)spop随机移除set中的元素

5)srandmember随机获取一个set中的元素

6)srem删除set中的指定元素

7)smove将源头set中的值移入目标set中

8)sdiff是第一个set相比第二个set的差异

9)sdiffstore是将第一个set相比第二个set的差异保存到一个新的set中

10)sinter用于求set1和set2之间的交集

11)sinterstore将set1和set2的交集保存到一个新的set中 

12)sunion是求两个set的并集,sunionstore是求并集同时存储到新的set中

8、redis常用数据类型sortedSet

Sorted-Sets和Sets类型极为相似,它们都是字符串的集合,都不允许重复的成员出现在一个Set中。它们之间的主要差别是Sorted-Sets中的每一个成员都会有一个分数(score)与之关联,Redis正是通过分数来为集合中的成员进行从小到大的排序。然而需要额外指出的是,尽管Sorted-Sets中的成员必须是唯一的,但是分数(score)却是可以重复的。 在Sorted-Set中添加、删除或更新一个成员都是非常快速的操作,由于Sorted-Sets中的成员在集合中的位置是有序的,因此,即便是访问位于集合中部的成员也仍然是非常高效的。事实上,Redis所具有的这一特征在很多其它类型的数据库中是很难实现的,换句话说,在该点上要想达到和Redis同样的高效,在其它数据库中进行建模是非常困难的。

1)zadd为key指定多组score/member作为参数

2)zincrby对成员memeber增加分数

3)zcard获取与该Key相关联的Sorted-Sets中包含的成员总数量

4)zcount获取成员分数在min至max之间的

5)zrange返回排名从start到end的成员

6)zrank该命令将返回参数中指定成员的位置值(按分数由低到高的顺序)

7)zrevrank命令将返回参数中指定成员的位置值(按分数由高到低的顺序)

8)zscore命令获得指定成员的分数

 9)zrem命令用于删除指定成员

9、redis中key的通用操作

1)keys pattern 用于匹配模式的键列表

2)del命令删除操作 

3)exists命令判断当前的key是否存在

4) move 名字用于将key移动到指定编号的库,不移动默认是放到0号库,使用select切换库

5)rename用于完成key的重命名

6)expire命令用于给key设定过期时间

7)persist命令消除过期时间,ttl命令是查看过期时间

8)type命令获取与参数中指定键关联值的类型,该命令将以字符串的格式返回

10、redis事务

Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:

  1. 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
  2. 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。

一个事务从开始到执行会经历以下三个阶段:

1)开始事务。MULTI   2)命令入队。 3)执行事务。EXEC 

事务常用命令

     1.MULTI    Redis Multi 命令用于标记一个事务块的开始。事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性(atomic)地执行。返回值:总是返回OK

    2.EXEC    Redis Exec 命令用于执行所有事务块内的命令

返回值: 事务块内所有命令的返回值,按命令执行的先后顺序排列。 当操作被打断时,返回空值 。

     3.DISCARD   Redis Discard 命令用于取消事务,放弃执行事务块内的所有命令。返回值: 总是返回 OK

    4.WATCH     Redis Watch 命令用于监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断

    5.UNWATCH   Redis Unwatch 命令用于取消 WATCH 命令对所有 key 的监视

下面演示开启事务和提交事务:

下面是开启事务和取消事务:

以上是关于JavaWeb开发之redis知识总结的主要内容,如果未能解决你的问题,请参考以下文章

JavaWeb之redis&Jedis

JavaWeb之redis&Jedis

java web开发如何学习?

SpringBoot进阶之缓存中间件Redis

javaweb学习总结二十三(servlet开发之线程安全问题)

Redis之集群知识点总结-- 源码分析