Redis(REmote DIctionary Server)是一个由Salvatore Sanfilippo写的key-value存储系统。
Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
Redis下载地址:https://github.com/MSOpenTech/redis/releases。
根据你系统平台的实际情况选择对应的版本,例如:windows环境下可以下载 Redis-x64-xxx.zip版本,解压到 C 盘并重新命名文件夹为 redis即可使用(例如:c:\redis)。
启动服务端 - 打开cmd窗口将路径切换到c:\redis下,输入命令:redis-server.exe redis.windows.conf 启动redis服务端。
如需启动客户端 - 另外打开一个cmd窗口并将路径切换到c:\redis下,输入命令: redis-cli.exe -h 127.0.0.1 -p 6379 则客户端启动,我们可以再客户端通过redis命令使用。
例如:
设置键值对 set firstKey hello
取出键值对 get firstKey
Redis在Java中作为缓存,常见操作共用方法列举:
import java.util.concurrent.TimeUnit; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.stereotype.Component; @Component public class RedisSentinelUtil { @Autowired //操作字符串的template,StringRedisTemplate是RedisTemplate的一个子集 private StringRedisTemplate stringRedisTemplate; @Autowired // RedisTemplate,可以进行所有的操作 private RedisTemplate<Object,Object> redisTemplate; public void setCachesData(byte[] key, Object value){ redisTemplate.opsForValue().set(key, value); } /** * 设值并设置失效时间 * @param key 需保存的key * @param value 需保存的值 * @param timeOut 失效时间 * @return */ public void setCachesData(byte[] key, Object value,int timeOut){ redisTemplate.opsForValue().set(key, SerializaUtil.serialize(value),timeOut,TimeUnit.SECONDS); } public void setCachesData(String key, String value){ stringRedisTemplate.opsForValue().set(key, value); } public boolean setnx(String key, String value){ return stringRedisTemplate.opsForValue().setIfAbsent(key, value); } public void setCachesData(String key, String value,int timeOut){ ValueOperations<String, String> ops = this.stringRedisTemplate.opsForValue(); boolean bExistent = this.stringRedisTemplate.hasKey(key); if (bExistent) { System.out.println("this key is bExistent!"); }else{ ops.set(key, value, timeOut,TimeUnit.SECONDS); } } /** * key是否存在 * @param key 需验证的key * @return 是否 */ public Boolean isExistsKey(String key){ return stringRedisTemplate.hasKey(key); } /** * key是否存在 * @param key 需验证的key * @return 是否 */ public Boolean isExistsKey(byte[] key){ return redisTemplate.hasKey(key); } /** * 失效 * * @param key 保存的key * @param seconds 秒 */ public Boolean setxpireData(String key, int seconds){ return stringRedisTemplate.expire(key, seconds,TimeUnit.SECONDS); } /** * 失效 * @param key 保存的key * @param seconds 秒 */ public Boolean setxpireData(byte[] key, int seconds){ return redisTemplate.expire(key, seconds,TimeUnit.SECONDS); } /** * 从缓存中获取数据 * @param key * @return */ public String getValue(String key) { if (key == null) return ""; String v = stringRedisTemplate.opsForValue().get(key); return (v == null) ? "" : v; } /** * 从缓存中获取数据 * @param key * @return */ public String[] getValues(String key) { if (key == null) return null; if(stringRedisTemplate.opsForValue().get(key)!=null){ String[] s = stringRedisTemplate.opsForValue().get(key).split(","); if (null!=s && s.length>0) return s; } return null; } /** * 从缓存中获取数据 * @param key * @return */ public Object getValue(byte[] key) { return redisTemplate.opsForValue().get(key); } /** * 从缓存中删除数据 * @param key * @return */ public void removeValue(String key) { stringRedisTemplate.delete(key); } /** * 从缓存中删除数据 * @param key * @return */ public void removeValue(byte[] key) { redisTemplate.delete(key); } }