MySQL redis学习与应用

        诸如mysql等关系型数据库,在数据存储在高并发情况下读写性能有所限制,Nosql(非关系型数据库)便应运而生,弥补了关系型数据库的不足。

【简介】

      redis是作为一种key-value存储形式的nosql数据库,得到广泛的应用,它支持主从复制,事务处理,乐观锁复杂事务控制,持久化,发布及订阅消息等特性。

【数据类型介绍】

      redis的数据类型相对关系型数据库较为简单,分为5大类型,分别是:string,hashs,lists,sets,sorted set。

      1. string类型是二进制、安全的数据类型,可以存放jps图片或者序列化对,常用的redis数据库命令为:

<span>		  </span>  <span>a. Set name lijie ----设置name=lijie  		b. Setnx 设置如果name存在,则返回0,设置不成功(nx--not exit)  		c. Setex 指定有效期:set haircolor 10 red   --10秒失效  		d. Setrange name 6 gmail.com  ----从第6个开始设置  		e. Mset key1 lijie1 key2 lijei2 key3 lijie3 --设置多个键值对  		f.  get --获得字符  		g. Getrange eamil 0 5  从下标为0到5的值  		h. Mget--批量返回  		i. Incr key6 --自增  		j. Incrby key5 6--以6来进行自增  		k. Decr/decrby  		l. Append key1 .net 在key1后面增加.net  		m. Strlen--返回长度</span><span>  </span>

 2. hashs类型占用的内存更少,常用命令:

		  <span>a. Hset--hset user:001 name lijie  		b. Hsetnx--hsetnx user:002 name lamp  		c. Hmset---hmset user:003 name lijie age 20 sex 1  		d. Hincrby--自增  		e. Hexists--判断是否存在 hexits user:002 name  		f. Hlen----返回所有键数量  		g. Hdel--hdel user:003 age  		h. Hkeys --hkeys user:001  		i. Hvals---hvals user:003  		j. Hgetall---获取所有fileds和value</span>

        3. lists数据类型分为链表结构和队列两种数据结构,常用命令:

		<span>a. Lpush--从头部压入元素:lpush list1 "hello"--栈  		b. Lrang myliist 0 -1  从头部一直去不到尾部  		c. Rpush---rpush list2 "hello"---队列  		d. Linsert---linsert list2 before hello word  		e. Lset--指定下标赋值:lset list2 1 my  		f. Lrem--从list 中删除n个和value相同的值  		g. Ipop从头弹出元素  		h. Rpop 从尾部  		i. Rpoplpush  		j. Lindex---lindex list2 2  		k. Llen---返回长度</span>

       4. sets类型支持并集,交集,叉集等操作,差用命令:

		<span>a. Sadd--sadd myset1 one  		b. Smembers--查看  		c. Srem --srem myset2 "one"  		d. Spop--随机弹出  		e. Sdiff--两个集合的差集    		f. Sdiffstor---叉集存储到指定sets里面:sdiffstore myset4 myset2 myset3  		g. Siner--返回交集/sinnerstore  		h. Sunion--并集/  		i. Smove---将第一个set中元素剪切到第二个set中 smove myset1 myset8 three  		j. Scard --查看个数  		k. Sismemeber---测试元素是不是set中元素  		l. Srandmember--随机返回元素不会删除</span>

       5. sort set是一种有序集合:

		<span>a. Zadd---zadd myzset “one”  		b. 取值:zrange myzet 0 -1 withscores(显示顺序)  		c. Zrem--zrem myzset two  		d. Zincrby--zincrby sset1 2 one--对顺序号进行增加  		e. Zrank--返回 索引:zrank myset3 two  		f. Zrevrank  		g. Zrerange--降序排序  		h. Zrangebyscore--按照范围返回:zrangebyscore sset2 2 4 with scores  		i. Zcount--返回数量 zcount seet2 2 4  		j. Zcard --返回   		k. Zremrangebyrank--按照索引删除  		l. Zremrangebyscore--按照顺序删除</span>

【java应用】

          redis在java中应用需要引入jar包:import redis.clients.jedis.Jedis;          

            不使用连接池的话,在代码中直接使用:Jedis client=new Jedis(“ip地址”,6379);,既可实现redis连接,当使用连接池时,创建连接池类:

package com.tgb.itoo.exam.students.controller;    import java.util.ResourceBundle;    import org.springframework.util.Assert;    import redis.clients.jedis.Jedis;  import redis.clients.jedis.JedisPool;  import redis.clients.jedis.JedisPoolConfig;    public class JedisPoolTest {  	private static JedisPool jedisPool;  	  	private static JedisPoolConfig initPoolConfig(){  		 JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();    	     // 控制一个pool最多有多少个可用的的jedis实例    //	     jedisPoolConfig.setMaxActive(1000);     	        // 最大能够保持空闲状态的对象数    	     jedisPoolConfig.setMaxIdle(300);    	        // 超时时间    	     jedisPoolConfig.setMaxWaitMillis(1000);    	        // 在borrow一个jedis实例时,是否提前进行alidate操作;如果为true,则得到的jedis实例均是可用的;    	     jedisPoolConfig.setTestOnBorrow(true);     	        // 在还会给pool时,是否提前进行validate操作    	     jedisPoolConfig.setTestOnReturn(true);    	     return jedisPoolConfig;    	}  	  	 /**        * 初始化jedis连接池        * <br>------------------------------<br>        */                public static void before() {            JedisPoolConfig jedisPoolConfig = initPoolConfig();              // 属性文件读取参数信息            ResourceBundle bundle = ResourceBundle.getBundle("redis_config");            String host = bundle.getString("redis.host");            int port = Integer.valueOf(bundle.getString("redis.port"));            int timeout = Integer.valueOf(bundle.getString("redis.timeout"));            String password = bundle.getString("redis.password");            // 构造连接池            jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, password);        }                public void testSet() {            Jedis jedis = null;             // 从池中获取一个jedis实例            try {                jedis = jedisPool.getResource();                jedis.set("blog_pool", "java2000_wl");            } catch (Exception e) {                // 销毁对象                jedisPool.returnBrokenResource(jedis);    //            Assert.fail(e.getMessage());            } finally {                // 还会到连接池                jedisPool.returnResource(jedis);            }        }      }

管道技术应用

    redis在连续执行写入操作时,为减少打开关闭数据库次数,创建管道可以提升性能,实战使用:

                Pipeline pipeline=client.pipelined();  		  		for (TemplateDetail templateDetail : templateDetails) {  			List<questionmain> questionMains=templateDetail.getQuestionMainList();  			for (QuestionMain questionMain : questionMains) {  				if(null!=questionMain){  				String redisKey=studenInfo.getStudentId()+"_"+studenInfo.getExamination_id()+"_"+questionMain.getId()+"_exam";  				  				try {  					pipeline.lpush(redisKey,JsonUtils.objectToJson(questionMain));  					pipeline.expire(redisKey, 7200);  				} catch (IOException e) {	  					e.printStackTrace();  				}				  				}  			}			  		}  		pipeline.sync();//管道执行</questionmain>

 以上就是MySQL redis学习与应用的内容,更多相关内容请关注PHP中文网(www.php.cn)!



© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享