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 安全隐患
推荐参考文章
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
参考()
可能会遇到的问题
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学习参考文档
http://www.voidcn.com/blog/boonya/article/p-4828879.html