Redis是当前比较热门的NOSQL系统之一, 它是一个key-value存储系统,和memcached相似,但在很大程度上补足了memcached的不足,它支持存储的value类型相对较多,包括String,List,Set和Hash,这些数据类型都支持push/pop,add/remove操做,在此基础上,redis支持各类不一样方式的排序,Redis数据都是缓存在计算机内存中, 而且会周期性的把更新的数据写入磁盘或者把修改操做写入追加的记录文件程序员
redis官网地址: http://redis.io/web
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。redis
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操做。spring
原子 – Redis的全部操做都是原子性的,同时Redis还支持对几个操做全并后的原子性执行。数据库
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过时等等特性。centos
Redis有着更为复杂的数据结构而且提供对他们的原子性操做,这是一个不一样于其余数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。缓存
Redis运行在内存中可是能够持久化到磁盘,因此在对不一样数据集进行高速读写时须要权衡内存,应为数据量不能大于硬件内存。在内存数据库方面的另外一个优势是,相比在磁盘上相同的复杂的数据结构,在内存中操做起来很是简单,这样Redis能够作不少内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,由于他们并不须要进行随机访问session
下载redis数据结构
$ wget http://download.redis.io/releases/redis-2.8.3.tar.gz $ tar -zxvf redis-2.8.3.tar.gz $ cd redis-2.8.3 $ make
安装redis可能会出现下面的错误并发
#make
cd src && make all
make[1]: Entering directory `/software/redis-2.8.8/src'
CC adlist.o
In file included from adlist.c:34:
zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory
zmalloc.h:55:2: error: #error "Newer version of jemalloc required"
make[1]: *** [adlist.o] Error 1
make[1]: Leaving directory `/software/redis-2.8.8/src'
make: *** [all] Error 2
解决方案执行下面的命令
安装gccyuan
yum -y install gcc*
make MALLOC=libc
缘由是没有安装jemalloc
内存分配器,能够安装 jemalloc
2. 编译完成, 进入src目录下有四个可执行文件redis-server, redis-benchmark, redis-cli和redis.conf
3. 用客户端测试
jchen19@server1:~$ redis-cli redis 127.0.0.1:6379> set name "test" OK redis 127.0.0.1:6379> get name "test" redis 127.0.0.1:6379> set foo "bar" OK redis 127.0.0.1:6379> get foo "bar" redis 127.0.0.1:6379>
至此redis已经成功安装
centos安装redis可经过如下命令完成:
yum install redis
启动redis
service redis start
1.插入数据 redis 127.0.0.1:6379> set name "test" OK 设置一个key-value对 2.查询数据 redis 127.0.0.1:6379> get name "test" 取出key所对应的value 3.删除键值 redis 127.0.0.1:6379>del name 删除这个key及对应value 4.验证键是否存在 redis 127.0.0.1:6379>exists name (integer)0 其中0表明key不存在, 1表明存在
引入依赖
<dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session</artifactId> <version>1.2.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> <version>1.2.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.7.2.RELEASE</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency>
web.xml中添加filter
<filter> <filter-name>springSessionRepositoryFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSessionRepositoryFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
配置redis
@Configuration @EnableCaching @EnableRedisHttpSession public class SpringRedisConfig extends CachingConfigurerSupport { @Bean public JedisConnectionFactory redisConnectionFactory() { JedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory(); redisConnectionFactory.setHostName(getRedisUrl()); redisConnectionFactory.setPort(Integer.parseInt(getRedisPort())); redisConnectionFactory.setPassword(getRedisPassword()); return redisConnectionFactory; } @Bean public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf) { RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>(); redisTemplate.setConnectionFactory(cf); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setKeySerializer(new StringRedisSerializer()); return redisTemplate; } @Bean public RedisTemplate<String, Long> longRedisTemplate() { final RedisTemplate<String, Long> template = new RedisTemplate<String, Long>(); template.setConnectionFactory(redisConnectionFactory()); template.setKeySerializer(new StringRedisSerializer()); template.setHashValueSerializer(new GenericToStringSerializer<Long>(Long.class)); template.setValueSerializer(new GenericToStringSerializer<Long>(Long.class)); return template; } @Bean public CacheManager cacheManager(RedisTemplate<String, String> redisTemplate) { RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate); // 启用前缀后,生成的key会自动加上cache名称,至关于命名空间。最终的缓存key为cachename:key的方式。 cacheManager.setUsePrefix(true); ArrayList<String> cacheNames = new ArrayList<String>(); cacheNames.add("campInfo"); cacheNames.add(ConfigService.getAppConfig().getProperty("DUPLICATE_REMOVAL", "")); cacheManager.setCacheNames(cacheNames); Map<String, Long> cacheExp = new HashMap<String, Long>(); cacheExp.put("campInfo", new Long(172800)); cacheExp.put(ConfigService.getAppConfig().getProperty("DUPLICATE_REMOVAL", ""), new Long(60)); cacheManager.setExpires(cacheExp); // // 设置默认失效时长为7200秒 // cacheManager.setDefaultExpiration(7200); return cacheManager; } protected String getRedisUrl() { return "192.168.102.255"; } protected String getRedisPort() { return "6379"; } protected String getRedisPassword() { return "123"; } }