Redis入门

为什么要用Redis?

减轻数据库访问压力
查询比较大的时候访问的压力非常大,操作数据库是做IO操作

高并发解决方案必备技术 缓存。

redis与memcached区别
redis 支持持久化
memcached 不支持持久化
Redis优势
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

Redis与其他key-value存储有什么不同?

Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

Redis 安装

下载地址:https://github.com/microsoftarchive/redis/releases
Redis入门_第1张图片
命令参考地址:
http://doc.redisfans.com/

SET key value 此命令设置指定键的值。
GET key 获取指定键的值。
GETRANGE key start end 获取存储在键上的字符串的子字符串。
GETSET key value 设置键的字符串值并返回其旧值。
GETBIT key offset 返回在键处存储的字符串值中偏移处的位值。
MGET key1 [key2…] 获取所有给定键的值
SETBIT key offset value 存储在键上的字符串值中设置或清除偏移处的位
SETEX key seconds value 使用键和到期时间来设置值
SETNX key value 设置键的值,仅当键不存在时
SETRANGE key offset value 在指定偏移处开始的键处覆盖字符串的一部分
STRLEN key 获取存储在键中的值的长度
MSET key value [key value …] 为多个键分别设置它们的值
MSETNX key value [key value …] 为多个键分别设置它们的值,仅当键不存在时
PSETEX key milliseconds value 设置键的值和到期时间(以毫秒为单位)
INCR key 将键的整数值增加1
INCRBY key increment 将键的整数值按给定的数值增加
INCRBYFLOAT key increment 将键的浮点值按给定的数值增加
DECR key 将键的整数值减1
DECRBY key decrement 按给定数值减少键的整数值
APPEND key value 将指定值附加到键

JAVA 使用 jedis

  

    redis.clients
    jedis
    2.9.0

private static Jedis jedis; 
    

    public static void setup() {
        //连接redis服务器,192.168.0.100:6379
        jedis = new Jedis("127.0.0.1", 6379);
        //权限认证 设置密码
        //jedis.auth("admin");  
        jedis.set("tsts","19");
    }
    
    public static void main(String[] args) {
    	 setup();
	}
    
    
    public void testString() {
        //-----添加数据----------  
        jedis.set("name","xinxin");//向key-->name中放入了value-->xinxin  
        System.out.println(jedis.get("name"));//执行结果:xinxin  
        
        jedis.append("name", " is my lover"); //拼接
        System.out.println(jedis.get("name")); 
        
        jedis.del("name");  //删除某个键
        System.out.println(jedis.get("name"));
        //设置多个键值对
        jedis.mset("name","liuling","age","23","qq","476777XXX");
        jedis.incr("age"); //进行加1操作
        System.out.println(jedis.get("name") + "-" + jedis.get("age") + "-" + jedis.get("qq"));
        
    }
    
    public void testMap() {
        //-----添加数据----------  
        Map map = new HashMap();
        map.put("name", "xinxin");
        map.put("age", "22");
        map.put("qq", "123456");
        jedis.hmset("user",map);
        //取出user中的name,执行结果:[minxr]-->注意结果是一个泛型的List  
        //第一个参数是存入redis中map对象的key,后面跟的是放入map中的对象的key,后面的key可以跟多个,是可变参数  
        List rsmap = jedis.hmget("user", "name", "age", "qq");
        System.out.println(rsmap);  
  
        //删除map中的某个键值  
        jedis.hdel("user","age");
        System.out.println(jedis.hmget("user", "age")); //因为删除了,所以返回的是null  
        System.out.println(jedis.hlen("user")); //返回key为user的键中存放的值的个数2 
        System.out.println(jedis.exists("user"));//是否存在key为user的记录 返回true  
        System.out.println(jedis.hkeys("user"));//返回map对象中的所有key  
        System.out.println(jedis.hvals("user"));//返回map对象中的所有value 
  
        Iterator iter=jedis.hkeys("user").iterator();  
        while (iter.hasNext()){  
            String key = iter.next();  
            System.out.println(key+":"+jedis.hmget("user",key));  
        }  
    }
    
    public void testList(){  
        //开始前,先移除所有的内容  
        jedis.del("java framework");  
        System.out.println(jedis.lrange("java framework",0,-1));  
        //先向key java framework中存放三条数据  
        jedis.lpush("java framework","spring");  
        jedis.lpush("java framework","struts");  
        jedis.lpush("java framework","hibernate");  
        //再取出所有数据jedis.lrange是按范围取出,  
        // 第一个是key,第二个是起始位置,第三个是结束位置,jedis.llen获取长度 -1表示取得所有  
        System.out.println(jedis.lrange("java framework",0,-1));  
        
        jedis.del("java framework");
        jedis.rpush("java framework","spring");  
        jedis.rpush("java framework","struts");  
        jedis.rpush("java framework","hibernate"); 
        System.out.println(jedis.lrange("java framework",0,-1));
    }  
    
    
    public void testSet(){  
        //添加  
        jedis.sadd("user","liuling");  
        jedis.sadd("user","xinxin");  
        jedis.sadd("user","ling");  
        jedis.sadd("user","zhangxinxin");
        jedis.sadd("user","who");  
        //移除noname  
        jedis.srem("user","who");  
        System.out.println(jedis.smembers("user"));//获取所有加入的value  
        System.out.println(jedis.sismember("user", "who"));//判断 who 是否是user集合的元素  
        System.out.println(jedis.srandmember("user"));  
        System.out.println(jedis.scard("user"));//返回集合的元素个数  
    }  
    
    

SpringBoot集成Redis

引入maven依赖


		org.springframework.boot
		spring-boot-starter-parent
		1.5.3.RELEASE
	
	
		
			org.springframework.boot
			spring-boot-starter-data-redis
		
		
			org.springframework.boot
			spring-boot-starter-data-redis
		
		
			org.springframework.boot
			spring-boot-starter-web
		
	

新增配置文件信息

spring.redis.database=0
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=123456
spring.redis.pool.max-idle=8
spring.redis.pool.min-idle=0
spring.redis.pool.max-active=8
spring.redis.pool.max-wait=-1
spring.redis.timeout=5000

Java代码

package com.service;

import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

@Service
public class RedisService {
	@Autowired
	private StringRedisTemplate stringRedisTemplate;
	public void setStr(String key, String value) {
		set(key, value, null);
	}
	
	public  void set(String key,Object ob, Long time) {
		if(ob!=null) {
			
			if(ob instanceof String) {
				stringRedisTemplate.opsForValue().set(key, ob.toString());
				if(time!=null) {
					stringRedisTemplate.expire(key, time, TimeUnit.SECONDS);
				}
			} else if (ob instanceof List) {
				
			}
			
		}
	}



	public Object getKey(String key) {
		return stringRedisTemplate.opsForValue().get(key);
	}

	public void delKey(String key) {
		stringRedisTemplate.delete(key);
	}
}

你可能感兴趣的:(java)