redis学习与应用
来源:互联网 发布:c语言程序代码生日快乐 编辑:程序博客网 时间:2024/05/22 14:16
诸如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=lijieb. 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/decrbyl. Append key1 .net 在key1后面增加.netm. Strlen--返回长度</span><span style="font-family:KaiTi_GB2312;"></span>
2. hashs类型占用的内存更少,常用命令:
<span style="font-family:SimSun;">a. Hset--hset user:001 name lijieb. Hsetnx--hsetnx user:002 name lampc. Hmset---hmset user:003 name lijie age 20 sex 1d. Hincrby--自增e. Hexists--判断是否存在 hexits user:002 namef. Hlen----返回所有键数量g. Hdel--hdel user:003 ageh. Hkeys --hkeys user:001i. Hvals---hvals user:003j. 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 worde. Lset--指定下标赋值:lset list2 1 myf. Lrem--从list 中删除n个和value相同的值g. Ipop从头弹出元素h. Rpop 从尾部i. Rpoplpushj. Lindex---lindex list2 2k. Llen---返回长度</span>
4. sets类型支持并集,交集,叉集等操作,差用命令:
<span style="font-family:SimSun;">a. Sadd--sadd myset1 oneb. Smembers--查看c. Srem --srem myset2 "one"d. Spop--随机弹出e. Sdiff--两个集合的差集 f. Sdiffstor---叉集存储到指定sets里面:sdiffstore myset4 myset2 myset3g. Siner--返回交集/sinnerstoreh. Sunion--并集/i. Smove---将第一个set中元素剪切到第二个set中 smove myset1 myset8 threej. 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 twod. Zincrby--zincrby sset1 2 one--对顺序号进行增加e. Zrank--返回 索引:zrank myset3 twof. Zrevrankg. Zrerange--降序排序h. Zrangebyscore--按照范围返回:zrangebyscore sset2 2 4 with scoresi. Zcount--返回数量 zcount seet2 2 4j. 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();//管道执行
0 0
- redis学习与应用
- 对Redis的学习与应用
- 【Redis 3】Redis数据库的学习与实践—Redis的常用命令及高级应用
- redis应用学习
- Redis安装与应用
- redis 安装与应用
- Redis数据库的学习与实践—Redis的常用命令及高级应用
- Redis数据库的学习与实践—Redis的常用命令及高级应用
- redis学习(一)Redis应用场景
- redis应用实例学习介绍
- Redis应用学习总结(一)
- Redis学习之高级应用
- Redis学习与总结
- Redis学习与使用
- redis事物介绍与应用
- Redis集群搭建与应用
- Redis集群搭建与应用
- redis数据类型操作与应用
- oracle学习笔记 buffer_cache大小的设置及依据
- 怎么投资理财,如果有且仅有100万本金?
- java.lang.Class usage
- csdn博客
- 关于以太网(Ethernet II)这个网络的个人理解以及应用(1)
- redis学习与应用
- bean的作用域
- struts2的请求参数的编码和valuestack放在哪了
- Kafka源码深度解析-序列6 -Consumer -消费策略分析
- 正则表达式
- Android——Activity生命周期
- JavaWeb工作原理
- [bzoj 1013] [JSOI2008]球形空间产生器sphere:高斯消元
- Java多线程一:创建线程