您的位置:首页 > 数据库 > Redis

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服务器。
再使用别的主机客户端就可以进行连接了
如下所示

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐