redis經常使用命令及安全Redis集羣環境搭建

redis 安裝

在centos 上很簡單html

yum install redis

 便可完成redis的安裝java

 

安裝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命令:node

redis-cli -h 192.168.66.88 -p 6379;分別是遠程主機和端口

本地可能鏈接遠程redis出現錯誤 connect refused 解決辦法redis

/etc/redis/redis.conf配置以下:數據庫

取消bind註釋 
將 bind 127.0.0.1

改成
bind 0.0.0.0

 

redis配置密碼

yum方式安裝的redis配置文件一般在/etc/redis.conf中,打開配置文件找到segmentfault

#requirepass foobared

去掉行前的註釋,並修改密碼爲所需的密碼,保存文件centos

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/1190000007624311ruby

 

redis命令介紹

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

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

相關文章
相關標籤/搜索