在centos 上很簡單html
yum install redis
便可完成redis的安裝java
cd /usr/local/redis/src make && make install
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/
方式一 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
yum方式安裝的redis配置文件一般在/etc/redis.conf中,打開配置文件找到segmentfault
#requirepass foobared
去掉行前的註釋,並修改密碼爲所需的密碼,保存文件centos
requirepass myRedis
若master配置了密碼則slave也要配置相應的密碼參數不然沒法進行正常複製的。
slave中配置文件內找到以下行,移除註釋,修改密碼便可安全
sudo service redis restart;//重啓redis服務
redis-cli -h 127.0.0.1 -p 6379 -a my_redis;//密碼爲my_redis
推薦參考文章 https://segmentfault.com/a/1190000007624311ruby
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;//取消生存時間
分別操做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的區別,大多數都會獲得如下觀點:
1 .Redis不單單支持簡單的k/v類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。
2 .Redis支持數據的備份,即master-slave模式的數據備份。
3 .Redis支持數據的持久化,能夠將內存中的數據保持在磁盤中,重啓的時候能夠再次加載進行使用。
4.Redis能夠實現主從複製,實現故障恢復。
5.Redis的Sharding技術: 很容易將數據分佈到多個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 Product product = redisDao.get(productId);//訪問redis查看是否存在該商品 //沒有該商品 if(product == null){ //訪問數據庫查詢 product = productDao.queryById(productId); //數據庫中沒有該商品 if(product == null){ new ApplicationException("該產品不存在"); }else{ //將商品放入redis redisDao.put(product); } }
導入大量數據到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