JAVAWEB开发之redis学习(一)——redis重点介绍、redis应用场景以及redis的安装运行
2017-07-04 18:22
645 查看
redis学习目标
1.redis特点及安装2.redis键值操作
3.redis数据类型[string, link,set,orderset,hash]
4.事务
5.消息订阅
6.持久化
7.集群
8.运维
redis简介
redis是开源BSD许可高级的key-value存储系统(NoSQL)可以用来存储字符串,哈希结构,链表,集合,因此,常用来提供数据结构服务。
redis和memcached相比的独特之处:
1.redis可以用来存储(storage),而memcached是用来做缓存(cache)。redis这个特点主要因为其有持久化功能。
2.redis中存储的数据有多种结构,而memcached存储的数据只有一种类型"字符串"
redis应用场景
场景1:取最新N个数据的操作比如典型的取网站中的最新文章,通过下面方式可以将最新的5000条评论放在redis的list集合中,并将超出集合部分从数据库获取。
(1)使用LPUSH latest.comments <ID> 命令,向list集合中插入数据
(2)插入完成后再用LTRIM latest.comments 0 5000命令使其永远只保存5000个ID
(3)然后我们在客户端获取某一页评论时可以使用下面的逻辑(伪代码)
# 伪代码 FUNCTION get_latest_comments(start, num_items): id_list = redis.lrange("latest.comments", start, start+num_items-1) IF id_list.length < num_items id_list = SQL_DB("SELECT ... ORDER BY time LIMIT ...") END RETURN id_list END如果还有不同的筛选维度,比如某个分类的最新N条,那么可以再建一个按此分类的List,只存ID的话,redis是非常高效。
场景2:排行榜应用,取TOP N操作
这个需求与上面需求的不同之处在于,前面以时间为权重,这个是以某个条件为权重,比如按顶的次数排序,这时就需要我们的sorted set,将需要排序的值设置成sorted set的score,将具体的数据设置成相应的value,每次只需要执行一条ZADD命令即可。
场景3:需要精准设定过期时间的应用
比如你可以把上面所说的sorted set的score值设置成过期时间的时间戳,那么就可以简单的通过过期时间排序,定时清除过期数据了,不仅可以清除redis中的过期数据,你完全可以把redis里这个过期时间当成是数据库中数据的索引,用redis找出哪些数据需要过期删除,然后再精确的从数据库中删除相应的记录。
场景4:计数器应用
redis的命令都是原子性的,你可以轻松的利用INCR,DECR命令来构建计数器系统。
场景5:Uniq操作,获取某段时间所有数据的排重值
这个最适合使用redis的set数据结构,只要不断的将数据往set中扔数据就行了,set集合会自动排重。
场景6:实时系统,反垃圾系统
通过上面所说的set功能,你可以知道某个终端用户是否执行了某操作,可以找到其操作的集合并进行分析统计。
场景7:Pub/Sub构建实时消息系统
redis的Pub/Sub系统可以构建实时消息系统,比如很多用Pub/Sub构建的实时聊天系统的例子。
场景8:构建队列系统
使用list可以构建队列系统。使用sorted set甚至可以构建有有优先级的队列系统。
场景9:缓存
性能优于Memcached,数据结构多样化
redis的下载安装和运行
redis的下载和安装
(1)到官网(https://redis.io/)下载最新版stable版(2)上传到Linux服务器
(3)在服务器上解压Linux源码并进入目录
(4)make进行编译(可选 make test)输入make并回车 发现出现错误如下所示
这是因为redis使用C语言编写的,需要安装激活C语言编译器的插件 需要使用yum install gcc 即可
成功安装gcc后 再进行make又出现了以下错误
上网查了以下输入命令:
make MALLOC=libc
便可解决
(5)安装到指定目录 例如:/usr/local/redis
make PREFIX=/usr/local/redis install
(6)将源码根目录下的redis.conf配置文件copy到安装redis的根目录下 不然 没有配置文件无法运行
redis的运行
第一步:首先开启指定的redis服务器进程进入reids安装根目录 /usr/local/redis
./bin/redis-server (默认前端运行。后台进城模式:修改对应的conf文件 设置daemonize yes)
查看帮助参数如下:
[root@yun redis]# ./bin/redis-server --help Usage: ./redis-server [/path/to/redis.conf] [options] ./redis-server - (read config from stdin) ./redis-server -v or --version ./redis-server -h or --help ./redis-server --test-memory <megabytes> Examples: ./redis-server (run the server with default conf) ./redis-server /etc/redis/6379.conf ./redis-server --port 7777 ./redis-server --port 7777 --slaveof 127.0.0.1 8888 ./redis-server /etc/myredis.conf --loglevel verbose Sentinel mode: ./redis-server /etc/sentinel.conf --sentinel如果不指定任何参数 默认启动安装根目录下的redis.conf配置文件 首次启动redis服务器后效果如下
第二步:开启客户端
命令:./bin/redis-cli
可以使用--help 查看参数(注意:redis服务器进程不可关闭 否则客户端无法连接,所以需要另外开启一个窗口执行客户端操作)
Usage: redis-cli [OPTIONS] [cmd [arg [arg ...]]] -h <hostname> Server hostname (default: 127.0.0.1). -p <port> Server port (default: 6379). -s <socket> Server socket (overrides hostname and port). -a <password> Password to use when connecting to the server ......-h 主机名
-p 指定端口号 默认是6379(redis安装根目录下可以添加多个配置文件.conf 在不同的.conf文件中指定不同的端口和配置)
-a 如果配置文件中设置了密码 客户端连接时必须使用-a 指定密码进行授权
如果不指定任何参数,那么客户端在连接redis服务进程时 默认连接本地主机主机端口号为6379的进程
连接测试如下
注意:
可以使用ps -ef|grep redis 查看redis进程,
使用kill -9 pid 杀死进程
使用netstat -nltp|grep redis 查看redis服务器进程端口的联网信息
如下所示:
重新再开启一个命令窗口
本机或同一局域网内的机器连接Linux服务器
需要注意的事项是,在当前的Linux本地主机上是可以连接redis服务进程的,但是在别的主机上是无法连接的。其解决方案如下:修改Linux上的redis服务器的配置文件 .conf
vi /usr/local/redis/redis.conf 然后搜索bind 即:/bind
默认是bind 127.0.0.1 也就是说默认只能由Linux服务器上的redis客户端才能进行连接。
修改为bing 127.0.0.1 192.168.1.4 因为redis服务器是安装在Linux上的 所以127.0.0.1表示的是Linux主机地址。所以需要在后面添加你所要连接Linux上redis服务器进程的客户端所在主机的IP。
也可以使用bind * 允许所有局域网内的主机进行连接
然后保存。
然后必须关闭redis服务器所在主机即Linux主机的防火墙,否则会出现connected refused,拒绝连接。最好是将防火墙开机启动关闭。service iptables stop 关闭防火墙
chkconfig iptables off 关闭防火墙开机启动
然后重启redis服务器。
再使用别的主机客户端就可以进行连接了
如下所示
相关文章推荐
- Redis学习和应用记录(1)--介绍和安装
- AppleWatch开发教程之Watch应用对象新增内容介绍以及编写运行代码
- AppleWatch开发教程之Watch应用对象新增内容介绍以及编写运行代码
- Redis各种数据结构介绍以及相应的业务场景应用
- .Net语言 APP开发平台——Smobiler学习日志:Poplist控件在APP中的应用场景以及代码
- AppleWatch开发教程之Watch应用对象新增内容介绍以及编写运行代码
- JavaWeb开发之深入分析请求转发和重定向的应用场景以及请求包含 (跟着龙哥学JavaWeb)
- .Net语言 APP开发平台——Smobiler学习日志:Poplist控件在APP中的应用场景以及代码
- Redis的Python实践,以及四中常用应用场景详解——学习董伟明老师的《Python Web开发实践》
- Redis简介、与memcached比较、存储方式、应用场景、生产经验教训、安全设置、key的建议、安装和常用数据类型介绍、ServiceStack.Redis使用(1)
- 重点介绍了Visual Studio 2012 的新特性、新功能、Visual Studio 2012 主要版本下载、Visual Studio 2012 产品家族下载,以及产品使用与开发…………
- Kinect开发学习笔记之(一)Kinect介绍和应用 (转)
- cocos2d开发学习四:场景过渡效果,以及过渡场景的作用
- 介绍了MongoDB在32位Windows7下的安装以及一些简单应用
- Memcached 缓存系统的-介绍、安装以及应用
- 韩顺平_轻松搞定网页设计(html+css+javascript)_第19讲_js运行原理_js开发工具介绍_js程序(hello)_js基本语法_学习笔记_源代码图解_PPT文档整理
- Debian纯手动安装redis2.6.13,以及详细配置介绍,个人实战版
- PHP框架学习2——ZendFramework的介绍、安装和实例运行
- Bada学习- (三十二)C++以及Flash应用开发流程之创建应用档案
- Bada学习- (三十)C++以及Flash应用开发流程之概述