Redis简介
关系型数据库 mssql mysql oracle sybase
非关系型数据库(大数据)redis mongodb
Redis是Remote Dictionary Server(远程数据服务)的缩写,由意大利人antirez(Salvatore Sanfilippo)开发的一款内存高速缓存数据库。
Redis还是一个开源的、基于Key-Value 键值对 方式的存储数据系统。可以理解为key是列名,value是存入的值
它支持丰富的数据类型(结构),比如:String(字符串)、Hash(哈希)、List(列表)、Sets(集合)和Sorted Sets(有序集合)等类型。
可持久化(随时把数据备份到硬盘中),保证数据安全。
Redis也通常被称为数据结构服务器。
中文官网:http://www.redis.cn
数据缓存:
在Web开发的时候,如果有一些数据在短时间内不会发生变化,而它们还要被频繁的访问,为了提高用户的请求速度和降低网站的负载,就把这些数据放到一个读取速度更快的介质上(或者是通过较少的计算量就可以获得该数据),该行为就称作对该数据的缓存。
该介质可以是文件、数据库、内存。
内存介质经常用于数据缓存。
Redis缓存案例:
同一个select查询SQL语句,每天需要被执行查询100万次,并且每次查询获得的数据还是一样的。为了减轻数据库的负载,就把查询好的数据给缓存起来(存储在内存中),第一个用户执行Select查询时从数据库中获得数据并存储到内存中,第二个到第100万个用户查询就直接从内存中获得数据。
使用缓存减轻数据库的负载。数据库是整个网站资源的“瓶颈”。
缓存的两种形式:
(1)网页缓存经常用在CMS(Content Manage System)内容管理系统中(Smarty缓存)
不发生变化的新闻信息页面适合做“页面缓存”,每个用户就从一个静态页面访问该新闻即可。
(2)数据缓存经常会用在页面的具体数据中使用
京东网站的一个页面从业务上看,数据有分类(推广商品、商品精选、普通商品),这些商品从数据读取出来,为了降低数据库负载,可以给它们设置三个数据缓存,这样独立更新、独立读取。
Redis数据的基本操作(在客户端操作)
Redis存放的5种数据类型:
类型 |
说明 |
String |
字符串 |
Hash |
哈希 |
List |
列表 |
Set |
集合 |
Sorted Set |
有序集合 |
命令方式操作5种数据类型:
命令 |
说明 |
案例 |
KEYS * |
查看所有键 |
|
String 字符串
一般用于存储字符串数据。
命令 |
说明 |
案例 |
SET key value |
设置指定 key 的值 |
SET uname "admin" SET upwd "123" |
GET key |
获取指定 key 的值 |
GET uname |
GETRANGE key start end |
返回 key 中字符串值的子字符(截取) |
GETRANGE uname 0 2 |
TYPE key |
显示Key的类型 |
TYPE uname |
Hash 哈希
一般用于存储对象。
命令 |
说明 |
案例 |
HMSET key field1 value1 field2 value2…… |
添加对象(key为对象名,field字段,value字段值) |
HMSET user uname "admin" password "123" age 18 |
TYPE key |
查看key(对象)类型 |
TYPE user |
HGET key field |
获取 key 中指定字段的值 |
HGET user uname |
HGETALL key |
获取指定 key 的所有字段和值 |
HGETALL user |
HEXISTS key field |
查看 key 中指定的字段是否存在 |
HEXISTS user age |
HDEL key field1 [field2] |
删除一个或多个哈希表字段 |
HDEL user uname age |
HLEN key |
获取 key 中字段的数量 |
HLEN user |
List 链表
一般是简单的字符串列表,按照插入顺序排序。
链表是一种数据结构,我们学习过的LinkedList也是链表结构的一种。
链表分为很多种:单向链表、双向链表、循环链表、块状链表等等。
命令 |
说明 |
案例 |
LPUSH key value1 [value2] |
将一个或多个值插入到列表头部(左侧) |
LPUSH zking "admin" LPUSH zking "abc" "abb" "abc" |
RPUSH key value1 [value2] |
将一个或多个值插入到列表尾部(右侧) |
RPUSH zking "admin" RPUSH zking "abc" "abb" "abc" |
LPUSHX key value |
将一个值插入到已存在列表的头部(左侧) |
LPUSHX zking “left” |
RPUSHX key value |
将一个值插入到已存在列表的尾部(右侧) |
RPUSHX zking “right” |
LLEN key |
获取列表长度 |
LLEN zking |
LRANGE key start end |
获取列表指定范围内的元素 |
LRANGE zking 0 2 |
LPOP key |
移出并获取列表的第一个元素 |
LPOP zking |
RPOP key |
移除并获取列表最后一个元素 |
RPOP zking |
Set 集合
集合是唯一字符串的无序集合。
唯一值表示集合中不允许键中有重复的数据。
命令 |
说明 |
案例 |
SADD key value1 [value2...] |
向集合添加一个或多个成员。 重复数据不能插入 |
SADD course “java” SADD course “sqlserver” “sql” |
SSCAN key cursor [MATCH pattern] [COUNT count] |
迭代集合中的元素 |
SSCAN couse 0 match s* |
SCARD key |
获取集合的成员数 |
SCARD course |
SREM key value1 [value2...] |
向集合删除一个或多个成员 |
SREM course “java” |
SISMEMBER key value |
判断 member 元素是否存在,是返回1,不是返回0 |
SISMEMBER course “java” |
SMEMBERS key |
返回集合中的所有成员 |
SMEMBERS course |
SDIFF key [key1, key2 ...] |
差集运算 属于key且不属于key1的元素构成的集合 |
SADD setA 1 2 3 SADD setB 2 3 4 SADD setC 1 2 5 SDIFF setA setB SDIFF setA setB setC |
SINTER key [key ...] |
交集运算 |
SINTER setA setB SINTER setA setB setC |
SUNION key [key ...] |
并集运算 |
SUNION setA setB SUNION setA setB setC |
Sorted Set 有序集合
实际上就是在集合类型上加了个有序而已。
有序集合比列表费内存。
命令 |
说明 |
案例 |
ZADD key score1 member1 [score2 member2] |
向有序集合添加一个或多个成员,或者更新已存在成员的分数。 如果member存在,则score会覆盖原有的分数。 |
ZADD person 1 Tom ZADD person 1 One 2 Two 3 Three |
ZCARD key |
获取有序集合的成员数 |
ZCARD person |
ZCOUNT key min max |
获得指定分数范围的元素个数 |
ZCARD person 1 3 |
使用Java代码实现Redis的CURD
修改redis.conf
……
#bind 127.0.0.1
……
protected-mode no
……
#bind 127.0.0.1注释掉该IP地址,表示允许网络访问。
注意:Redis默认只允许本机连接,网络访问不允许。因此注释掉该段代码,允许网络访问。
protected-mode no表示运行时报受保护异常。
重启redis:
$ ./redis-cli shutdown #关闭
$ ./redis-server reids.conf #重启启动
启动Linux中的redis
$ ./redis-server redis.conf
$ ./redis-cli
用Maven搭建项目
在pom.xml中引入Jedis依赖包
<!--引入redis依赖-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>