Redis缓存技术总结
来源:互联网 发布:鬼 知乎 编辑:程序博客网 时间:2024/05/22 05:12
NoSQL和关系型数据库区别
NoSQL非关系型数据库:Redis、MongoDB、HBase等,基于Key-Value存储,采用命令操作
关系型数据库:Oracle、MySQL、DB2、SQLServer等,基于表结构存储,采用SQL操作
Redis
redis是一个key-value存储的非关系型数据库。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。
Redis特点
- 采用C语言编写,基于内存操作,被称为内存数据库
- 存储的数据结构是key-value结构,value值可以为字符串、哈希、列表、集合、有序集合结构。
- Redis的存取速度异常快
- Redis支持持久化操作,将内存数据同步到数据文件中
Redis还提供了事务、消息传递等功能
在系统中,通常使用Redis做数据缓存使用。
查询缓存:第一次从数据库取出放入缓存,然后后续都从缓存取出数据。添加/更新缓存:将用户数据通过检测后放入缓存,然后给用户响应,后台开启线程取数据处理。
Redis操作命令
字符串操作
set key value //设置value值get key //获取value值strlen key //获取value长度incr key //将value加1incrby key i //将value加idecr key //将value减1decrby key i //将value减iappend key value //将原有key的值拼接上value值
key操作
keys pattern //查看keydel key //删除keyexpire key time //设置有效时间(秒)type key //判断value值类型rename key newkey //修改key名称
哈希操作(Java中的Map)
hset key 字段名 字段值 //设置一组hmset key 字段名 字段值 字段名 字段值 //设置多组hget key 字段名 //获取一个字段值hmget key 字段名1 字段名2 //获取多个字段值hlen key //获取字段数量hkeys key //查看字段名hdel key 字段名 //删除字段名
列表操作(Java中List)
lpush key value //从头部放入值(key列表存在插入,不存在创建列表插入)rpush key value //从尾部放入值lpop key //从头部删除一个元素rpop key //从尾部删除一个元素lrem key count value //删除多少个值等于value的元素lindex key index //获取index位置的value值lrange key start end //获取指定范围的元素linsert key before|after 元素 要插入的值 //插入元素lset key index value //更新index位置的value值llen key //获取列表元素数
集合操作(Java中Set)
sadd key value value //向集合添加元素srem key value //删除value元素scard key //获取集合元素数量smembers key //查看所有元素srandmember key count //获取count个随机数sinter key1 key2 //两个集合交集,key1和key2都有sunion key1 key2 //两个集合并集,去重复合并sdiff key1 key2 //差集,key1有,key2没有
有序集合
zadd key score value //向集合添加元素zrem key value //删除元素zcard key //元素数量zrange key start end //获取指定范围的元素(小到大)zrevrange key start end //获取指定范围的元素(大到小)zrevrank key value //获取value索引(大到小)zrank key value ////获取value索引(小到大)
4. Java对Redis操作
- 引入驱动包jedis.jar- 之后建立连接,对Redis操作- 释放连接资源**示例代码**
public void test2(){ Jedis jedis = new Jedis("localhost"); jedis.set("msg", "java msg");//set key value String str = jedis.get("msg");//get key System.out.println(str); jedis.close();//有些版本jar包没有该方法 }
5. 对象存取操作(基于JSON字符串存取)
- 将Java对象转成JSON字符串写入Redis
public void test1(){ Emp emp = new Emp(); emp.setEmpno(100); emp.setEname("ROSE"); emp.setSal(20000.0); emp.setJob("Programming"); emp.setDeptno(10); //将emp转成json字符串 Gson gson = new Gson(); String jsonStr = gson.toJson(emp); Jedis jedis = new Jedis("localhost"); jedis.set("emp_100", jsonStr); jedis.close(); }
- 将JSON字符串从Redis取出转成Java对象
public void test2(){ Jedis jedis = new Jedis("localhost"); String jsonStr = jedis.get("emp_100"); //将json字符串转成emp Gson gson = new Gson(); Emp emp = gson.fromJson(jsonStr, Emp.class); System.out.println(emp.getEmpno()+" "+emp.getEname()+" "+emp.getJob()); jedis.close(); }
6. 对象存取操作(基于序列化存取)
- 将对象序列化存储
public void test1_1(){ Emp emp = new Emp(); emp.setEmpno(101); emp.setEname("JACK"); emp.setSal(20000.0); emp.setJob("Programming"); emp.setDeptno(10); //将emp对象序列化成byte[] byte[] bts = SerializeUtil.serialize(emp); Jedis jedis = new Jedis("localhost"); jedis.set("emp_101".getBytes(), bts); jedis.close(); }
- 反序列化获取
public void test2_1(){ Jedis jedis = new Jedis("localhost"); byte[] bts = jedis.get("emp_101".getBytes()); //将byte数组转成emp对象 Emp emp = (Emp)SerializeUtil.unserialize(bts); System.out.println(emp.getEmpno()+" "+emp.getEname()+" "+emp.getJob()); jedis.close(); }
7. 分页缓存
思路:将每一个页记录使用Redis列表存储。为了保持同步性增删改操作需要做如下处理
- 删除:需要清除Redis中当前页,后续页缓存
- 更新:需要清除Redis中当前页缓存
- 添加:需要清除所有页缓存
redis常用五种数据类型:string,hash,list,set,zset(sorted set).
String:是最简单的类型,一个key对应一个value List类型:链表类型,主要功能是push、pop、获取一个范围的所有值等。
Set类型:集合,和数学中的集合概念相似。ZSet(Sorted Set)类型
在set的基础上增加了一个顺序属性,这一属性在添加修改元素时可以指定,每次指定后zset会自动安装指定值重新调整顺序。可以理解为一张表,一列存value,一列存顺序。操作中的key理解为zset的名字。hash类型 hash是最接近关系数据库结构的数据类型,可以将数据库一条记录或程序中一个对象转换成hashmap存放在redis中。
- Redis缓存技术总结
- 网站缓存技术总结( ehcache memcache redis)
- 网站缓存技术总结( ehcache memcache redis)
- 网站缓存技术总结( ehcache、memcache、redis对比)
- 网站缓存技术总结( ehcache memcache redis)
- 网站缓存技术总结( ehcache、memcache、redis对比)
- 网站缓存技术总结( ehcache memcache redis)
- 网站缓存技术总结( ehcache、memcache、redis对比)
- 网站缓存技术总结( ehcache、memcache、redis对比)
- 网站缓存技术总结( ehcache、memcache、redis对比)
- REDIS缓存技术
- redis缓存技术学习
- redis缓存技术学习
- redis缓存技术
- Redis缓存技术介绍
- redis缓存技术
- redis缓存技术学习
- Redis作为缓存总结
- ajax页面无刷新上传文件
- Linux:应用服务器搭建-weblogic服务域的创建(一 创建篇)
- OFBIZ分享:如何让OFBIZ使用中文界面
- 51 nod 1354 选数字(stl+dp)
- NIO学习文章转载
- Redis缓存技术总结
- 吾爱破解crackme 033 034
- 笔试题——团队活动分组
- DDD开发模式ABP框架权限设置
- BZOJ 1078 斜堆
- java设计模式之单例
- 【源码解读】从ArrayList.class中解读为什么foreach中不能移除ArrayList元素
- Gitlab的API调用
- Postgresql常用的表字段操作语句以及其他一些SQL语句