redis的搭建

redis的安装(linux,源码安装)
一. redis是C语言写的,所以源码安装首先需要配置C语言的编译环境gcc
yum -y install gcc-c++ (-y是指同一所有安装的要求,反正也得同意,不如不麻烦)
看到Complete!即为安装成功
二. 下载redis
wget http://download.redis.io/releases/redis-5.0.0.tar.gz (不一定要选择5.0版本,但redis的版本是以双数为稳定版,单数为测试版)
可以在windows下载后通过一些工具复制,这个具体自己百度吧
三. 安装redis
下载后可以通过 ll | grep redis查看,这个时候如果发现这个文件没有可执行权限,那么需要修改文件的权限
chmod 777 文件名(文件名太长可以只打一部分然后按Tab键进行补全,777代表放开所有的权限)
解压redis包
tar -zxvf redis.XXX.tar.gz
然后进入解压后产生的目录
开始编译,只需要一个敲make命令即可,然后等待编译完成
看到make[1]: Leaving directory 'XXXX'就是编译完成了
开始安装
make prefix=usr/local/redis install (prefix指的是安装的路径,推荐安装到这里)
安装后进入usr/local/redis/bin目录下,使用./redis-server命令启动redis,如果看到一个很简陋的立体图形(像一个奶酪),就说明启动成功了
上边虽然启动成功了,但是这种前段启动方式有很大的缺陷,就是不能关闭!一般我们用后端启动,即启动后在后台自动运行。
配置后端启动
回到redis的源码文件夹,把一个叫redis.conf的文件copy到安装的bin目录下
cp redis.conf /usr/local/redis/bin
修改配置文件
vim redis.conf
往下翻,找到daemonize no,把no改为yes。
使用 ./redis-server redis.conf命令后端启动
启动后可以用 ps-aux | grep redis 来查看是否在后台运行
关闭redis
还需要进入redis的安装目录下执行 ./redis-cli shutdown 命令
jedis的使用(关于Jedis自己去百度)
jedis的入门程序
如果运行这个程序报错如:Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException:java.net.ConnectException: Connection refused (Connection refused),原因是你的端口号或者IP地址错误,如果这两个确认正确,先关闭linux的防火墙(systemctl stop firewalld.service),如果还不行,检查redis.conf中bind XXX 这一行是不是只能由某个IP地址访问,是的话把这一行注释掉!
redis设置密码还是在redis.conf中找到requirepass XXX这一行,这一行的原本状态可能是被注释掉的,你需要取消注释并修改为如 requirepass "111111"
package cn.yangwanhao.redis.test;

import org.junit.Test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class Tests {

@Test
public void run1() {
    //创建和redis的连接
    Jedis jedis = new Jedis("192.168.253.131",6379);
    //提供密码
    jedis.auth("******");
    jedis.set("key1", "1");
    System.out.println(jedis.get("key1"));
    jedis.close();
}

@Test
public void run2() {
    //获取Jedis连接池
    JedisPool pool = new JedisPool("192.168.253.131",6379);
    //获取连接
    Jedis jedis = pool.getResource();
    //提供密码
    jedis.auth("******");
    jedis.set("key2", "2");
    System.out.println(jedis.get("key2"));
    //使用连接池时,连接一定要关闭,关闭后连接会自动回到连接池供别人使用
    //如果不关闭连接,连接耗尽后就会死机
    jedis.close();
    pool.close();
}

}
jedis和spring整合
application-context配置文件


spring与jedis整合的测试代码
package cn.yangwanhao.redis;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class JedisSpringTest {

private ApplicationContext applicationContext;

@Before
public void setUp() throws Exception{
    String configLocation = "classpath:ApplicationContext.xml";
    applicationContext = new ClassPathXmlApplicationContext(configLocation);
}

@Test
public void run1() throws Exception{
    //获取连接池
    JedisPool jedisPool = (JedisPool)applicationContext.getBean("jedisPool");
    //获取连接
    Jedis jedis = jedisPool.getResource();
    //存入
    jedis.set("key4", "bbb");
    //取出
    System.out.println(jedis.get("key4"));    
}

}
redis的数据命令与使用
进入命令行界面的方式
进入到redis的安装目录下执行 ./redis-cli命令即可。进入界面后,如果设有密码,需要执行 auth 密码命令,例:auth 111111,否则执行任何命令都会出现 error NOAUTH Authentication required。
redis的数据类型(redis里面 空 不是 null ,而是 nil )
字符串String
列表list(redis中使用的是双向循环链表实现的list)
散列hash
集合set
有序集合zset
redis的命令(分数据类型)
redis的数据没法修改,只能通过key来进行覆盖,有同名的key将会覆盖,没有就新增
String类型(用于单个的字符串存储)
set key value 例:set a aaa
get key 例:get a (得到的结果就是aaa)
del key 例:del a (得到的结果是删除的条数)
incr key 使key自增
incrby key num 使key每次自增num
decr key 使key自减
hash类型(一般应用于将redis座位分布式缓存,存储数据库中的数据对象)
hset key filed value 例:hset user1 name zhangsan执行完再执行hset user1 age 17
☆hmset key filed name filed name... 例:hmset user2 name lisi age 18 sex nan
hget key filed 例:hget user1 name (得到的结果就是zhangsan)
☆hmget key filed filed... 例:hmget user1 name age sex (可一次性得到user1的多个指定信息)
☆hgetall key 例:hgetall user1 (即可得到user1的全部信息)
hdel key file 例:hdel user1 name (删掉了user1的name属性)
list类型
lpush key value value value... 例:lpush list1 1 2 3 4 5
lrange key start stop : start是开始的下标,stop是结束的下标,下标从0开始。例:lrange list1 0 3 (结果就是4 3 2 1),如果想要取出全部,就把stop设为-1,例:lrange list1 0 -1。
rpush用法同上,只是存取的顺序不一样
lpop key 例:lpop list1 (每执行一次,会从左边弹出(去除)一个元素)
rpop用法同上,只是它是从右边弹出一个元素
llen key 例:llen list1 (获取这个集合的长度)
set类型(set中数据是无序的,并且不允许重复)
增加sadd key value value value... 例:sadd set1 1 2 3 4 5
遍历smembers key 例:smembers set1 (结果是 1 2 3 4 5)
删除srem key value 例:srem set1 5 (再次执行smembers set1结果是 1 2 3 4)
判断sismember key value 例:sismember set1 9 (返回结果1是存在0是不存在)
集合的差运算sidff key1 key2 (判断输出集合key1和key2之间的差)
集合的交运算sinter key1 key2
集合的并运算sunion key1 key2
zset类型
zadd key score name score name... 例:zadd key1 10 zhangsan 20 lisi
zrange key start stop withscores 例:zrange key1 0 -1 withscores (-1仍然代表全部,取出的时候按照从低到高的顺序排序,withscores可以显示出成绩,可以不写withscore)
zrem key name 例:zrem key1 lisi (就可以把maliu去掉)
zscore key name 例:zscore key1 zhangsan (就可以显示出zhangsan的score)
zrevrange key start stop withscore 例:zrevrange key1 0 -1 withscore (可以从高到低的显示出姓名成绩)
redis通用命令
keys * 命令可以查看所有的key
keys *1命令可以查看所有名字带1的key,其他的也一样
rename key newkey (重命名key)
type key (查看key的返回值类型)
ping 命令 (用于查看服务器是否还在运行,收到pong回复则还在运转)
redis的持久化
redis的数据都是存在于内存中,这样存取的速度超级快,但是一旦系统发生故障,比如断电...redis里的数据就会全部丢失,为解决这个问题,就有了redis的持久化方案,即把内存中的数据放在硬盘中。
rdb:可以设置间隔多长时间保存一次(redis默认的持久化方案(不用任何配置))
优点:不影响redis的存取速度
缺点:如果发生故障可能会丢失部分数据(数据的完整性得不到保证)
aof:可以设置实时保存
优点:持久化良好,可以保证数据的完整性
缺点:牺牲了存取速度
一般我们采取第一种方案,使用redis就是为了保证存取速度,如果使用第二种,redis的存取速度会极大的降低,不符合我们的初衷。
redis的主从复制(了解)
主从复制:redis的持久化保证了数据的完整性,但如果保存数据的硬盘遭到了损坏,那么数据仍然会遭受损失,解决的办法就是再用一台机器对服务器的数据进行实时备份。
使用的是心跳检测机制
主从复制必须使用rdb持久化方案;从服务器一般设为只读,保证主从服务器的数据一致性
具体的主从复制操作自己百度......

猜你喜欢

转载自www.cnblogs.com/yangwanhao/p/10012179.html