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/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;java
import org.junit.Test;linux
import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool;c++
public class Tests {redis
@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配置文件 <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <!-- 最大链接数 --> <property name="maxTotal" value="30" /> <!-- 最大空闲链接数 --> <property name="maxIdle" value="10" /> <!-- 每次释放链接的最大数目 --> <property name="numTestsPerEvictionRun" value="1024" /> <!-- 释放链接的扫描间隔(毫秒) --> <property name="timeBetweenEvictionRunsMillis" value="30000" /> <!-- 链接最小空闲时间 --> <property name="minEvictableIdleTimeMillis" value="1800000" /> <!-- 链接空闲多久后释放, 当空闲时间>该值 且 空闲链接>最大空闲链接数 时直接释放 --> <property name="softMinEvictableIdleTimeMillis" value="10000" /> <!-- 获取链接时的最大等待毫秒数,小于零:阻塞不肯定的时间,默认-1 --> <property name="maxWaitMillis" value="1500" /> <!-- 在获取链接的时候检查有效性, 默认false --> <property name="testOnBorrow" value="true" /> <!-- 在空闲时检查有效性, 默认false --> <property name="testWhileIdle" value="true" /> <!-- 链接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true --> <property name="blockWhenExhausted" value="false" /> </bean>spring
<!-- redis单机 经过链接池 -->数据库
<bean id="jedisPool" class="redis.clients.jedis.JedisPool" destroy-method="close"> <constructor-arg name="poolConfig" ref="jedisPoolConfig"/> <constructor-arg name="host" value="192.168.93.88"/> <constructor-arg name="port" value="6379"/> </bean> spring与jedis整合的测试代码 package cn.yangwanhao.redis;vim
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;windows
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持久化方案;从服务器通常设为只读,保证主从服务器的数据一致性 具体的主从复制操做本身百度......缓存