最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

MySQLredis学习与应用

来源:动视网 责编:小采 时间:2020-11-09 09:10:21
文档

MySQLredis学习与应用

MySQLredis学习与应用: 诸如mysql等关系型数据库,在数据存储在高并发情况下读写性能有所限制,Nosql(非关系型数据库)便应运而生,弥补了关系型数据库的不足。【简介】 redis是作为一种key-value存储形式的Nosql数据库,得到广泛的应用,它支持主从复制,事务处理,乐观锁复杂事
推荐度:
导读MySQLredis学习与应用: 诸如mysql等关系型数据库,在数据存储在高并发情况下读写性能有所限制,Nosql(非关系型数据库)便应运而生,弥补了关系型数据库的不足。【简介】 redis是作为一种key-value存储形式的Nosql数据库,得到广泛的应用,它支持主从复制,事务处理,乐观锁复杂事


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

【简介】

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

【数据类型介绍】

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

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

<span style="font-family:KaiTi_GB2312;">	
</span>
<span style="font-family:SimSun;">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 style="font-family:KaiTi_GB2312;">
</span>

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

	 <span style="font-family:SimSun;">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 style="font-family:SimSun;">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 style="font-family:SimSun;">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 style="font-family:SimSun;">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();//管道执行

文档

MySQLredis学习与应用

MySQLredis学习与应用: 诸如mysql等关系型数据库,在数据存储在高并发情况下读写性能有所限制,Nosql(非关系型数据库)便应运而生,弥补了关系型数据库的不足。【简介】 redis是作为一种key-value存储形式的Nosql数据库,得到广泛的应用,它支持主从复制,事务处理,乐观锁复杂事
推荐度:
标签: 学习 应用 运用
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top