redis安装
官网下载tar,放到/usr/local里并解压到这里目录
进入这个目录, make 安装
make安装完毕,进入src目录 make install。 完毕即可开启服务
redis 启动:
开启redis安装文件目录 src 里的 /redis-server /redis安装目录里的redis.conf ===》 就是是开始服务端并指定一个配置文件 (我的服务脚本与配置文件分别在 /usr/local/redis/bin 与
/usr/local/redis/etc下)
开启服务端完毕后, 再启动bin里面的redis-cli 启动客户端。包括我们的操作都是在客户端进行。(客户端不用指定配置文件)。
查看redis服务是否开启
netstat -tunpl | grep redis
查看redis 端口
ps -f | grep 6379
cp 文件路径 到某个路径
退出redis服务:
1.直接杀进程 2.
redis参数设置:
redis.conf 里参数: daemonize no 改为yes 设置为后台启动
port 设置端口号
file 设置日志文件
redis 持久化机制:
rdb 与 aof :
rdb: 快照 。每隔一个时间点 就将rdb的数据写到硬盘里 是默认的 默认文件名dump.rdb。数据集比较大时,它快照读到硬盘是会停止下来处理客户端 可能会造成数据丢失
aof: redis将每次写的操作都记录到 appendonly.aof文件中。每次redis重启就会执行这个文件中的写操作来重置数据库中的内容。 可以通过配置文件设置fsync策略
在Redis的配置文件中存在三种同步方式,它们分别是:
appendfsync always #每次有数据修改发生时都会写入AOF文件。
appendfsync everysec #每秒钟同步一次,该策略为AOF的缺省策略。
appendfsync no #从不同步。高效但是数据不会被持久化。
redis 数据类型: String/Hash/List/Set和ZSet:
string 语法:
set key 值 get key --》 多次设置一个key会覆盖
setnx key 值 --》 会先判断有没有 没有即设置返回1 有就不设置返回0
setex key 值 时间 --》 设置值什么时候过期
Hash 语法:
类似hashMap, k-v的形式。
hset/hget,hmset/hmget, hexists/判断是否有这个k,
hvals/hgetall/hlen/hdel => 查值个数/查所有键值对/查所有值/删除指定的
List 类型:
对头尾部进行添加删除数据。 类似队列
hpush/rpush => 栈/堆 => 头插/尾查
Set/ZSet类型:
类似java里的List 支持取交集并集取差
sadd/srem/sdiff/sdiffstore/ => 增加/删除/返回两集合不同的元素/将两集合不同的元素存到另外一个集合
redis 高级命令:
exprie:判断key 在不在
设置key的时间/查看key的剩余时间//
select: 选择数据库,默认一个数据库逻辑上的分成16个数据库,默认第0个
move[key][数据库下标]:将key 移到其他数据库。
rename :重命名key
redis 安全性:
可以设置操作的密码
设置bind 参数为127.0.0.1 为仅本机可操作和从服务器链接
#########################################################
redis 主从复制:
过程:
从连接主,然后发送sync同步命令,在同步时可以继续处理client请求。
一般主负责写,从负责读。
配置: 从服务器 的 配置文件 里配置salveof 【slaveof 192.168.0.11 6379 】 => 主服务器的IP和端口
如果主服务器访问要密码 就 再加上密码。
这里要注意 主服务器要允许从服务器的IP访问,如果还报错,去查看日志文件判断是不是别的原因
有了主从复制后,相对主服务器进行监控,redis 2.8后有了稳定的哨兵机制,当主服务器挂了,将从服务器更为主服务器,自动切换
哨兵配置:..
redis 事物:
这个东西但是没多大用处,发生意外数据不回滚。
redis 使用java api:
Jedis jedis = new Jedis("IP", 端口号);
jedis.hset()/jedis.hget()/jedis.sadd() => 方法名与实际在linux操作的命令一样
注意要开放端口、jedis.close()。 否则报错ctionException: java.net.SocketTime 也可以在new Jedis 时设置连接时长
*redis 使用api 设计方面 :
因为redis 是非关系型数据库,所以是不能像mysql之类的关系型数据库做关系查询(select userName from users where sex=w) 那么redis 如何做条件查询? 设计 使用 redis的多种集合配合使用
例如 (思路):要查某个user的年龄在25并且性别是男的。 => 将整个user对象存到一个map<id,user>,用一个user_age_25的set集合,放年龄25的id,用一个user_sex_man=的set集合放性别为男的id。 那要查的时候就拿到年龄25的所有key,在存完整用户的map 里调用hget( key)用户的完整信息。
redis 写入的性能非常好,但是在条件查询方面它仍是个nosql。
redis 订阅与传播:
某台机器订阅主机器后,能接收到主机器发送的信息。
##########################################
redis集群搭建:
集群:数据分槽。 一个集群放一部分数据,每个从节点放一点从节点的数据
集群搭建: 至少要三个master, 至少六台服务器。
1)服务器都安装redis
改redis.conf文件:
daemonize:yes #后台启动
*bind 本地当前机器的IP
*dir /usr/local/redis/7001/ #指定数据文件存放的位置,否则数据会丢失
*cluster-enabled yes #开启集群模式
*cluster-config-file nodes7001.conf #这里700*最好和端口号对上,这个配置是告诉别的集群这个节点的存在。可以把整个集群当做一个整体,这个整体里的每个节点都知道别的所有的节点的存在。nodes 文件要不相同
cluster-node-timeout 5000
appendonly yes #aof模式
2)下载yum ruby、 yum rubygems、 gem install redis、
3) 启动6个redis 实例,判断是否都能启动成功
/redis-server /redis.conf 对应的配置文件
ps -ef |gref redis
4) 到redis的安装目录底下去找到sec/redis-trib.rb #这是redis集群操作脚本 命令如下:
./redis-trib.rb create --replicas 1 192.168.1.128:7001 192.168.1.129:7002 192.168.1.130:7003 192.168.1.131:7004 192.168.1.132:7005 192.168.1.133:7006
这个命令就是启动集群操作 1 是表示 主服务器和从服务器的比例,按这个命令的服务器的添加顺序,如果比例是1,前四个就是主,后四个就是从,
输入命令后会提示一些集群的配置信息。 在配置信息里可以看到集群分了多少槽、从节点关系集群的id等。 确定就输入yes。 集群就搭建完毕。
5) 集群启动
可连任意一个客户端 命令 :
./redies-cli -c -h 192.168.1.171 -p 7001
进入客户端后 cluster nodes 可查看集群信息
6)集群使用
../存值拿值
6)集群退出
集群命令必须逐个退出 ./redies-cli -c -h 192.168.1.171 -p 7001 shutdown
//无法启动时 删除临时数据文件 再一个个重启
redis java 集群 操作
@Test public void test2(){ //当前所有的node节点 Set<HostAndPort> jedis = new HashSet(); jedis.add(new HostAndPort("192.168.123.168",7001)); jedis.add(new HostAndPort("192.168.123.168",7003)); jedis.add(new HostAndPort("192.168.123.168",7002)); jedis.add(new HostAndPort("192.168.123.168",7004)); // GenericObjectPoolConfig goConfig = new GenericObjectPoolConfig(); // JedisClusters jedisPoolConfig = new JedisCluster(jedis,6000,100,goConfig); // 和下面的一样 JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig.setMaxIdle(100); jedisPoolConfig.setMaxTotal(20); jedisPoolConfig.setMaxWaitMillis(-1); JedisCluster jc = new JedisCluster(jedis,6000,100,jedisPoolConfig); //设置好了就可以操作了 jc.set("name","pengyan"); jc.sadd("user"); jc.get("name"); jc.get("user"); try { jc.close(); } catch (IOException e) { e.printStackTrace(); } //防火墙要关... //同样也可以用配置文件..xml 整个spring.. }
redis spring 整合 :
使用配置文件即可。
参考 https://www.cnblogs.com/northern-light/p/8540309.html
=====================================================================
info命令 可以查看当前redis 状态
scp -r 文件名/ 192.168.134.129:/目录 复制到另外一台服务器
tar -xvf 文件名 -C /某个路径