目录
10.1新建SpringBoot工程,引入Web,Redis的场景启动器
10.3在使用处注入StringRedisTemplate或者RedisTemplate
10.3.2.1redisTemplate默认如果保存对象,使用jdk序列化机制
10.3.2.2改变jdk的序列化规则 (RedisConfiguration)
4.关闭并重启服务器(指定配置文件)和客户端,在客户端获取,结果如下:
1、Nosql定义和分类
1.1什么是NoSql
NoSql,叫非关系型数据库,它的全名Not only sql。为了解决高并发、高可用、高可扩展,大数据存储等一系列问题而产生的数据库解决方案,就是NoSql。它不能替代关系型数据库,只能作为关系型数据库的一个良好补充。
1.2NoSql的分类
1.2.1键值(Key-Value)存储数据库
相关产品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB
典型应用: 内容缓存,主要用于处理大量数据的高访问负载。
数据模型: 一系列键值对
优势: 快速查询
劣势: 存储的数据缺少结构化
1.2.2列存储数据库
相关产品:Cassandra, HBase, Riak
典型应用:分布式的文件系统
数据模型:以列簇式存储,将同一列数据存在一起
优势:查找速度快,可扩展性强,更容易进行分布式扩展
劣势:功能相对局限
1.2.3文档型数据库
相关产品:CouchDB、MongoDB
典型应用:Web应用(与Key-Value类似,Value是结构化的)
数据模型: 一系列键值对
优势:数据结构要求不严格
劣势: 查询性能不高,而且缺乏统一的查询语法
1.2.4图形(Graph)数据库
相关数据库:Neo4J、InfoGrid、Infinite Graph
典型应用:社交网络
数据模型:图结构
优势:利用图结构相关算法。
劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案。
2、Redis定义,历史和应用场景
2.1什么是redis
Redis是使用c语言开发的一个高性能键值数据库。Redis可以通过一些键值类型来存储数据。
键值类型:
- String字符类型
- map散列类型hash
- list列表类型
- set集合类型
- sortedset有序集合类型
2.2redis历史发展
2008年,意大利的一家创业公司Merzia推出了一款基于MySQL的网站实时统计系统LLOOGG,然而没过多久该公司的创始人 Salvatore Sanfilippo便 对MySQL的性能感到失望,于是他决定亲自为LLOOGG量身定做一个数据库,并于2009年开发完成,这个数据库就是Redis。 不过Salvatore Sanfilippo并不满足只将Redis用于LLOOGG这一款产品,而是希望更多的人使用它,于是在同一年Salvatore Sanfilippo将Redis开源发布,并开始和Redis的另一名主要的代码贡献者Pieter Noordhuis一起继续着Redis的开发,直到今天。
Salvatore Sanfilippo自己也没有想到,短短的几年时间,Redis就拥有了庞大的用户群体。Hacker News在2012年发布了一份数据库的使用情况调查,结果显示有近12%的公司在使用Redis。国内如新浪微博、街旁网、知乎网,国外如GitHub、Stack Overflow、Flickr等都是Redis的用户。
VMware公司从2010年开始赞助Redis的开发, Salvatore Sanfilippo和Pieter Noordhuis也分别在3月和5月加入VMware,全职开发Redis。
2.3redis的应用场景
缓存(数据查询、短连接、新闻内容、商品内容等等)。(最多使用)
分布式集群架构中的session分离。
聊天室的在线好友列表。
任务队列。(秒杀、抢购、12306等等)
应用排行榜。
网站访问统计。
数据过期处理(可以精确到毫秒)
3、Redis下载和安装
3.1windows版下载和安装
window版下载地址:https://github.com/MicrosoftArchive/redis/releases
下载Redis For window X64.zip,解压到指定目录
3.1.1Redis的目录结构
Redis.windows.conf:redis的配置文件。文件内可以声明redis的端口号,database的数量,密码,是否后台运行,持久化机制,日志等信息。
Redis-server.exe:redis服务端,可以启动redis服务。
Redis-cli.exe: redis自带客户端,启动以后即可连接服务端,通过以命令的形式向redis服务中存取数据,也可以关闭redis服务。
3.1.2启动redis服务端
双击 redis-server.exe ,启动成功,出现如下界面。端口号6379,pid:16316,如果关闭当前窗口,相当于关闭redis服务。
或者以命令行的方式启动redis,在当前目录下输入redis-server即可启动redis服务
3.1.3启动redis客户端
双击redis-cli.exe即可启动客户端:如下图表示,则已经连上服务端,可以通过命令存取数据了。
如果服务端设置了密码,在运行客户端连接服务端时,需要加上密码
./redis-cli -a 123456 -------123456为密码
或者
3.1.4图形化界面客户端
RedisDesktopManager以图形化界面的方式操作redis中的数据。安装redis桌面管理工具。
建立连接:
输入名称,主机ip,默认端口号6379,即可连接redis服务器。
Redis默认有16个数据库,如果不指定,默认使用database0
向第一个数据库中添加,修改,删除数据。
3.1.5指定配置启动redis服务
Redis启动时可以不指定配置文件,会使用默认配置启动。也可以指定配置文件。如果我们修改了配置文件的内容,希望指定以某个配置文件启动,则使用如下方法启动
复制配置文件redis.windows.conf,改名为redis.conf,修改使用密码123456登录。
以该配置文件运行redis服务:
此时,再通过图形化客户端连接服务时,必须指定密码才可以,否则会连接失败。
3.2Linux版下载和安装
3.2.1下载
官网:https://redis.io/download,选择稳定版本。
3.2.2安装
1.解压
通过xftp把redis安装包上传到指定文件夹。
解压:tar -zxvf redis-6.0.6.tar.gz
2.安装
由于redis依赖c语言环境,所以先安装gcc
[root@localhost ~]# yum install gcc
如果是线上下载安装包的话,先进入目录 usr/local,下载安装包
[root@localhost local]# wget http://download.redis.io/releases/redis-6.0.6.tar.gz
解压
[root@localhost local]# tar -xvf redis-6.0.6.tar.gz
安装好了c语言环境以后,需要编译redis,进入解压后的目录
[root@localhost local]# cd /usr/local/redis-6.0.6/
编译
[root@localhost local]# make
安装,如果不指明安装路径,就会在当前路径下安装,指明安装路径,会在指明的路径下生成bin文件夹,bin里面是redis的命令
[root@localhost redis-6.0.1]# make PREFIX=/usr/local/redis-6.0.6 install
进入bin
注意:如果在编译的时候报错如下:等等,太长了,不列举了。
m ake[1]: *** [server.o] 错误 1
make[1]: 离开目录“/usr/redis-6.0.6/src”
make: *** [all] 错误 2
server.c:2402:11: 错误:‘struct redisServer’没有名为‘assert_file’的成员
server.assert_file = "<no file>";
server.c:2403:11: 错误:‘struct redisServer’没有名为‘assert_line’的成员
server.assert_line = 0;
server.c:2404:11: 错误:‘struct redisServer’没有名为‘bug_report_start’的成员
server.bug_report_start = 0;
解决办法:升级gcc版本
[root@localhost redis-6.0.6]# gcc -v # 查看gcc版本
[root@localhost redis-6.0.6]# yum -y install centos-release-scl # 升级到9.1版本
[root@localhost redis-6.0.6]# yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
[root@localhost redis-6.0.6]# scl enable devtoolset-9 bash
以上为临时启用,如果要长期使用gcc 9.1的话:
[root@localhost redis-6.0.6]# echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
在执行编译就没有问题了,安装成功,会提示:
执行make test,可能会出现如下错误:
[root@localhost redis-6.0.6]# make test
cd src && make test
make[1]: 进入目录“/usr/redis-6.0.6/src”
CC Makefile.dep
make[1]: 离开目录“/usr/redis-6.0.6/src”
make[1]: 进入目录“/usr/redis-6.0.6/src”
You need tcl 8.5 or newer in order to run the Redis test
make[1]: *** [test] 错误 1
make[1]: 离开目录“/usr/redis-6.0.6/src”
make: *** [test] 错误 2
解决办法:
[root@localhost redis-6.0.6]# yum install tcl
[root@localhost redis-6.0.6]# make test
重新测试成功。
3.2.3运行redis
以某个配置文件启动redis服务,一定要注意配置文件的路径
3.2.4后台启动
上面redis的启动方式,是前端启动,一关闭客户端,redis的服务也就停掉了,所以这种启动方式非常不友好。我们可以修改配置文件中的启动方式:
[root@localhost redis-6.0.6]# vim redis.conf
进到redis.conf文件里,然后找到daemonize no把no改为yes
启动的时候指定修改之后的配置文件即可。
3.2.5查看是否启动成功
3.2.6关闭redis服务
或者:
如果redis设置了密码,则以下面方式关闭,123456为密码
3.2.7使用桌面管理工具连接Linux redis
修改redis配置文件,注释掉bind 127.0.0.1
保护模式关闭:
设置密码:
3.2.8以服务方式启动redis
1.把redis加入service服务
vim /lib/systemd/system/redis.service
2.写入
[Unit]
Description=redis
After=network.target
[Service]
Type=forking
PIDFile=/var/run/redis_6379.pid
ExecStart=/usr/local/redis-6.0.6/src/redis-server /usr/local/redis-6.0.6/etc/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
注意路径问题,以及PIDFile的路径对应的是redis-6.0.6/redis.conf里面的PIDFile
保存,退出。
3.运行以下
[root@localhost redis-6.0.6]# systemctl enable redis.service # 加入开机启动
[root@localhost redis-6.0.6]# systemctl is-enabled redis.service # 查看开机是否启动成功
enabled
[root@localhost redis-6.0.6]# systemctl start redis #开启redis服务
[root@localhost redis-6.0.6]# systemctl status redis //查看redis运行状态
3.3清缓存命令
把缓存键值对清空。
4、Redis的String数据类型的赋值取值删除
4.1命令
4.1.1赋值
语法:set key value
4.1.2取值
语法:get key
4.1.3取值并赋值
语法:GETSET key value
4.1.4设置/获取多个键值
语法:
mset key value [key value …]
mget key [key …]
4.1.5删除
语法:del key
127.0.0.1:6379> del test
(integer) 1
4.1.6数值增减
递增数字
当存储的字符串是整数时,Redis提供了一个实用的命令INCR(increate),其作用是让当前键值递增,并返回递增后的值。
语法:incr key</