redis常用命令及安全Redis集群环境搭建

redis 安装

在centos 上很简单

yum install redis

 即可完成redis的安装

 

安装redis

cd /usr/local/redis/src
make && make install

 

安装redis3.2.8

1.tar -zxvf redis-3.2.8.tar -C /usr/local/
2.cd redis-3.28/src
3.make && make install
4.cp redis-server redis-trib.rb /usr/local/bin
5.mv redis.conf /etc/redis/

 

启动redis

方式一 service redis start

方式二
redis-server /etc/redis/redis.conf

 

关闭服务

redis-cli -h localhost -p 8000 shutdown;

 

本地连接到远程redis命令:

redis-cli -h 192.168.66.88 -p 6379;分别是远程主机和端口

本地可能连接远程redis出现错误 connect refused 解决办法

/etc/redis/redis.conf配置如下:

取消bind注释 
将 bind 127.0.0.1

改为
bind 0.0.0.0

 

redis配置密码

yum方式安装的redis配置文件通常在/etc/redis.conf中,打开配置文件找到

#requirepass foobared  

去掉行前的注释,并修改密码为所需的密码,保存文件

requirepass myRedis

master配置了密码,slave如何配置

若master配置了密码则slave也要配置相应的密码参数否则无法进行正常复制的。
slave中配置文件内找到如下行,移除注释,修改密码即可

 

重启redis

sudo service redis restart;//重启redis服务

 

客户端通过密码访问redis

redis-cli -h 127.0.0.1 -p 6379 -a my_redis;//密码为my_redis

 

Redis 安全隐患

推荐参考文章 https://segmentfault.com/a/1190000007624311

 

redis命令介绍

redis官方命令:https://redis.io/commands

1.set hello "world";//key:hello,value是world
2.get hello;//println "world"
3.keys *;//list all keys in redis
4.keys *h*;//list all keys which contains 'h'
5.del hello;//delete the key "hello"
6.randomkey;//returns a random key from redis 
7.exists hello;//判断key是否存在 返回1 表示key存在 返回0表示不存在
8.rename hello world;//给key重命名
9.type key;//返回key所存储的值的类型 返回值有以下内容:
none(key不存在)
string(字符串)
list(列表)
set(集合)
zset(有序集)
hash(哈希表)
10.sort key;//默认情况按照从小到大的顺序排序
flushdb;//删除当前数据库中的所有Key
flushall; //删除所有数据库中的key
11.dbsize;//查看key的个数
12.expire key 1000;//设置key的过期时间
13.ttl key;查询key剩余过期时间
14.persist key;//取消生存时间


 

 Java操作redis常见使用操作

分别操作String,List,Set,HashMap,SortedSet等操作

package com.arch.redis;

import com.arch.redis.constants.Constants;
import com.arch.redis.utils.RedisUtils;
import org.junit.Test;
import redis.clients.jedis.Jedis;

import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class RedisOperationTest {
    private static Jedis jedis = null;

    static {
        jedis = RedisUtils.getConnection(Constants.REDIS_HOST, Constants.REDIS_PORT);
    }

    /**
     * redis操作字符串
     */
    @Test
    public void testString() {
        jedis.set("name", "xiaobian");
        System.out.println(jedis.get("name"));

        jedis.append("name", " is my lover");//拼接
        System.out.println(jedis.get("name"));

        jedis.del("key");//删除key
        System.out.println(jedis.get("key"));

        jedis.mset("name", "chenxiaobian", "age", "23", "address", "shanghai");
        System.out.println(jedis.get("age"));

        jedis.incr("age");//进行加1操作
        System.out.println(jedis.get("age"));
        System.out.println(jedis.get("name") + "-" + jedis.get("age") + "-" + jedis.get("address"));
    }

    /**
     * redis操作map
     */
    @Test
    public void testMap() {
        Map<String, String> map = new HashMap<String, String>();
        map.put("name", "xiaobian");
        map.put("age", "22");
        map.put("qq", "751652064");

        //存map
        jedis.hmset("user", map);
        List<String> rsmap = jedis.hmget("user", "name", "age", "qq");
        System.out.println(rsmap);

        //删除map中的某个键值
        jedis.hdel("user", "age");
        System.out.println(jedis.hget("user", "age"));
        System.out.println(jedis.hlen("user"));//返回key为user的键中存放的值的个数
        System.out.println(jedis.exists("user"));
        System.out.println(jedis.hkeys("user"));//返回所有的key
        System.out.println(jedis.hvals("user"));//返回所有value
    }

    /**
     * redis操作list
     */
    @Test
    public void testList() {
        jedis.del("fruit");
        System.out.println(jedis.lrange("fruit", 0, -1));

        jedis.lpush("fruit", "apple");
        jedis.lpush("fruit", "orange");
        jedis.lpush("fruit", "pear");
        System.out.println(jedis.lrange("fruit", 0, -1));

        jedis.rpush("fruit", "apple");
        System.out.println(jedis.lrange("fruit", 0, -1));
    }

    /**
     * 操作set
     */
    @Test
    public void testSet() {

        jedis.sadd("users", "zhangsan");
        jedis.sadd("users", "wangwu");
        jedis.sadd("users", "lihong");

        //获取所有加入的value
        System.out.println(jedis.smembers("users"));
        System.out.println(jedis.sismember("users", "zhangsan"));

        //随机返回users中元素value
        System.out.println(jedis.srandmember("users"));

        //返回集合的元素个数
        System.out.println(jedis.scard("users"));
    }

    /**
     * redis排序
     */
    @Test
    public void testSort(){
        jedis.del("nihao");

        jedis.rpush("nihao","1");
        jedis.rpush("nihao","6");
        jedis.rpush("nihao","3");

        System.out.println(jedis.lrange("nihao",0,-1));
        //排序
        System.out.println(jedis.sort("nihao"));
        System.out.println(jedis.lrange("nihao",0,-1));
    }
}

 

Redis&&Memcached

如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点:

     1 .Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

     2 .Redis支持数据的备份,即master-slave模式的数据备份。

     3 .Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

     4.Redis可以实现主从复制,实现故障恢复。

     5.Redis的Sharding技术: 很容易将数据分布到多个Redis实例中

 

Redis集群环境搭建

官方文档 https://redis.io/topics/cluster-tutorial

参考(http://www.cnblogs.com/wuxl360/p/5920330.html)

可能会遇到的问题http://www.cnblogs.com/carryping/p/7447823.html

  redis集群最少需要创建6个node,创建集群的命令为:

redis-trib.rb  create  --replicas  1  192.168.102.245:7000 192.168.102.245:7001  192.168.102.245:7002  192.168.102.246:7003  192.168.102.246:7004  192.168.102.246:7005

需要安装ruby 通过下面命令

yum -y install ruby ruby-devel rubygems rpm-build
gem install redis

 

连接方式可通过:

redis-cli -h 192.168.31.245 -c -p 7002  

加参数 -c 可连接到集群,因为上面 redis.conf 将 bind 改为了ip地址,所以 -h 参数不可以省略

 

关于redis在实际项目中使用的代码

业务层性能瓶颈里面使用redis

Product product = redisDao.get(productId);//访问redis查看是否存在该商品

//没有该商品
if(product == null){
    //访问数据库查询
	product = productDao.queryById(productId);
    
    //数据库中没有该商品
	if(product == null){
       new ApplicationException("该产品不存在");
	}else{
       //将商品放入redis
       redisDao.put(product);
	}
}

 

Redis高级特性介绍

1.pipelining

导入大量数据到redis中,这种方式很慢,很增加性能开销

cat prod_data|redis-cli -h 106.15.38.134 -p 7000

 

redis提供了pipe方式

cat prod_data |redis-cli -h localhost -p 7000 --pipe

可能执行下面命令会出现下面这个错误

ERR unknown command 'ET'
ERR unknown command 'ET'
ERR unknown command 'ET'

导致这个问题的原因是redis-cli中只支持doc格式的换行符 \r\n ,如果你在Linux下、Mac下或者Windows下创建的文件,最好都转个码。没有转码的文件,执行会失败

执行转码命令

unix2dos test.txt 

如果提示

-bash: unix2dos: command not found

提示没有这个命令,就需要进行安装,执行下面命令进行安装

 yum install unix2dos -y

再进行转码

unix2dos test.txt 

 

最后执行数据导入

cat prod_data |redis-cli -h localhost -p 7000 --pipe

 

prod_data内容为:

SET	sjnq1705031737271628	0
SET	sys11705031737271628	0
SET	syvm1705031737271638	0
SET	seuy1705031737271638	0
SET	seuy1705031737271648	0
SET	sbuk1705031737271648	0
SET	snq81705031737271658	0
SET	snq81705031737271668	0
SET	s6qr1705031737271668	0
SET	s1p51705031737271678	0
SET	s1p51705031737271688	0
SET	grbt1705031737271688	0
SET	gl3l1705031737271698	0
SET	gl3l1705031737271708	0
SET	gras1705031737271708	0
SET	grap1705031737271718	0
SET	gt6t1705031737271718	0
SET	gt7s1705031737271728	0
SET	g6291705031737271728	0
SET	g6st1705031737271738	0
SET	gcy71705031737271738	0
SET	gogl1705031737271748	0
SET	gogo1705031737271758	0
SET	gdlc1705031737271758	0
SET	gp2p1705031737271768	0
SET	g3p81705031737271778	0
SET	g9yx1705031737271788	0
SET	g9yx1705031737271798	0
SET	gw2h1705031737271808	0
SET	ganh1705031737271818	0
SET	ga1p1705031737271828	0
SET	gsun1705031737271828	0
SET	gsnl1705031737271838	0
SET	gylq1705031737271838	0
SET	gp271705031737271848	0
SET	47v11705031737271848	0
SET	45nq1705031737271858	0
SET	45451705031737271868	0
SET	4lgn1705031737271868	0
SET	4lgn1705031737271878	0
SET	46xp1705031737271878	0
SET	4td21705031737271888	0
SET	4qst1705031737271898	0
SET	4qs51705031737271908	0
SET	4i2i1705031737271908	0
SET	4i241705031737271918	0
SET	46ja1705031737271918	0
SET	46f11705031737271928	0
SET	4w351705031737271928	0
SET	4w3t1705031737271938	0
SET	4a2a1705031737271938	0
SET	41p11705031737271948	0
SET	41p11705031737271958	0
SET	4hbt1705031737271968	0
SET	4h1p1705031737271978	0
SET	42wa1705031737271978	0
SET	4re91705031737271988	0
SET	afvn1705031737271998	0
SET	afvn1705031737272008	0
SET	a9281705031737272008	0
SET	a9281705031737272018	0
SET	a28c1705031737272018	0
SET	a2ki1705031737272028	0
SET	autu1705031737272028	0
SET	autu1705031737272038	0
SET	ahv41705031737272038	0
SET	ahv41705031737272048	0
SET	airn1705031737272058	0
SET	airn1705031737272068	0
SET	avhi1705031737272068	0
SET	a8kc1705031737272078	0
SET	aikd1705031737272088	0
SET	aikd1705031737272098	0

参考redis官网https://redis.io/topics/mass-insert

 

Redis学习参考文档

1.https://segmentfault.com/a/1190000006836530

2.http://www.voidcn.com/blog/boonya/article/p-4828879.html

转载于:https://my.oschina.net/chenxiaobian/blog/738407

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值