Redis——基础使用
Redis总体介绍:
Redis特性
- Redis(REmote DIctionary Server),是一个开源的内存数据库
- 持久化:RDB、AOF
- 主备复制
- 丰富的数据结构
- Lua脚本、事务
Redis常见数据类型
- String
- List
- Hash
- Set
- Zset
- Bitmap、HyperLogLog、GEO
Redis应用场景
- 排行榜,zest
- 计数,String
- 好友关系, Hash
- Recerse cache(反向cache),string
- Top 10, list
- Fast transcation with lua
- 用户访问记录,list
- 抢红包,List、lua、string
Redis数据结构解析
1、String
Redis的String是基于C string的封装,在头部存储了长度信息,以便于支持动态扩展,其源码如下所示:
struct sdshdr {
int len; //len表示buf中存储的字符串的长度。
int free; //free表示buf中空闲空间的长度。
char buf[]; //buf用于存储字符串内容。
};
为了节省内存,当一个字符串符合整数格式的时候mredis会将转换成64位有符号整数
String结构是简单的key-value类型,value不仅是String,也可以是数字
常用命令:
get——获取key对应的值
mget——批量获取多个key的值,如果可以不存在则返回null
incr &&incrby——incr对key对应的值进行加加操作,并返回新的值;incrby加指定值
decr && decrby——decr对key对应的值进行减减操作,并返回新的值;decrby减指定值
static void testString(Jedis jedis){
jedis.set("name","xinxin");//向key-->name中放入了value-->xinxin
System.out.println("set:" + jedis.get("name"));//执行结果:xinxin
jedis.append("name", " is my lover"); //拼接
System.out.println("append:" + jedis.get("name"));
jedis.del("name"); //删除某个键
System.out.println("del:" + jedis.get("name"));
//设置多个键值对
jedis.mset("name","liuling","age","23","qq","476777XXX");
System.out.println("mget:" + jedis.mget("name","age","qq","ss"));
jedis.incr("age"); //进行加1操作
System.out.println("incr " + jedis.get("age"));
jedis.incrBy("age",2);//进行加任意数操作
System.out.println("incrBy:" + jedis.get("age"));
jedis.decr("age");//进行减1操作
System.out.println("decr:" + jedis.get("age"));
jedis.decrBy("age", 2);//进行减任意数操作
System.out.println("decrby:" + jedis.get("age"));
}
输出:
set:xinxin
append:xinxin is my lover
del:null
mget:[liuling, , 476777XXX, null]
incr
incrBy:
decr:
decrby:
2、hash
Hash是一个String类型的field和value之间的映射表,在redis中Hash数据类型的key(hash表名称)对应的value实际的内部存储结构为一个HashMap,因此Hash特别适合存储对象。相对于把一个对象的每个属性存储为String类型,将整个对象存储在Hash类型中会占用更少内存。
当前HashMap的实现有两种方式:当HashMap的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,这时对应的value的redisObject的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。
常用命令:
hset——设置key对应的HashMap中的field的value
hget——获取key对应的HashMap中的field的value
hgetall——获取key对应的HashMap中的所有field的value
static void testHash(Jedis jedis){
//-----添加数据----------
Map<String, String> map = new HashMap<String, String>();
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<String> 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
System.out.println(jedis.hgetAll("user"));//返回map对象中的所有key=value
Iterator<String> iter=jedis.hkeys("user").iterator();
while (iter.hasNext()){
String key = iter.next();
System.out.println(key+":"+jedis.hmget("user",key));
}
}
输出:
[xinxin, , ]
[null] true
[qq, name]
[, xinxin]
{qq=, name=xinxin}
qq:[]
name:[xinxin]
3、Set
set代表一个集合(元素不重复),集合在redis里实现为字典
如果set里所有都元素都是整数时,redis会以inset都形式存储,inset是一个有序都整形数组
常用命令:
sadd——在key对应的set中添加一个元素。
smembers——获取key对应的set的所有元素。
spop——随机返回并删除key对应的set中的一个元素。
sdiff——求给定key对应的set与第一个key对应的set的差集
suion——求给定key对应的set并集
static void testSet(Jedis jedis){
//添加
jedis.sadd("user2","liuling");
jedis.sadd("user2","xinxin");
jedis.sadd("user2","ling");
jedis.sadd("user2","zhangxinxin");
jedis.sadd("user2","who");
//移除noname
jedis.srem("user2","who");//移除集合中一个或多个成员
System.out.println(jedis.smembers("use2r"));//获取所有加入的value
System.out.println(jedis.scard("user2"));//返回集合的元素个数
System.out.println(jedis.spop("user2"));//随机返回并删除key对应的set中的一个元素。
System.out.println(jedis.scard("user2"));//返回集合的元素个数
System.out.println(jedis.sismember("user2", "who"));//判断 who 是否是user集合的元素
System.out.println(jedis.srandmember("user2"));//返回集合中一个或多个随机数
}
4、List
Redis的List类型其实就是每一个元素都是String类型的双向链表。我们可以从链表的头部和尾部添加或者删除元素。这样的List既可以作为栈,也可以作为队列使用。
常用命令:
lpush——将一个或多个值插入到列表头部。
lrange——获取key对应的list的指定下标范围的元素,-1表示获取所有元素。
lpop——移出并获取列表的第一个元素
rpush——在列表中添加一个或多个值
rpop——移除并获取列表最后一个元素
static void testList(Jedis jedis){;
//开始前,先移除所有的内容
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");
System.out.println(jedis.lrange("java framework",0,-1));
jedis.rpush("java framework","spring");
jedis.rpush("java framework","struts");
jedis.rpush("java framework","hibernate");
System.out.println(jedis.lrange("java framework",0,-1));
}
输出:
[]
[hibernate, struts, spring]
[]
[spring, struts, hibernate]
5、sorted set
Redis sorted set和set一样也是string类型元素的集合,且不允许重复的成员。不一样的是每个元素都会有一个double类型的分数。redis会通过分数来为集合中的成员进行从小到大的排序。要注意的是有序集合的成员是唯一的,但分数(score)却可以重复。
常用命令:
zadd:向有序集合添加一个或多个成员,或者更新已存在成员的分数
zcard: 获取有序集合的成员数
zrange:通过索引区间返回有序集合成指定区间内的成员
static void testsorted (Jedis jedis){
jedis.zadd("sort",2.3,"a");
jedis.zadd("sort",1.3,"b");
jedis.zadd("sort",4.3,"c");
jedis.zadd("sort",0.3,"d");
jedis.zadd("sort",0.3,"e");
System.out.println("zcard:" + jedis.zcard("sort"));
System.out.println(jedis.zrange("sort",0,1));
System.out.println(jedis.zrange("sort",0,2));
System.out.println(jedis.zrange("sort",0,3));
System.out.println(jedis.zrange("sort",0,4));
}
输出:
[d, e]
[d, e, b]
[d, e, b, a]
[d, e, b, a, c]
更多命令可参考http://www.redis.net.cn/order/
Redis——基础使用的更多相关文章
- windows下使用redis,Redis入门使用,Redis基础命令
windows下使用redis,Redis入门使用,Redis基础命令 >>>>>>>>>>>>>>>> ...
- [.net 面向对象程序设计深入](14)Redis——基础
[.net 面向对象程序设计深入](14)Redis——基础 很长一段时间没更新博客了,坚持做一件事,真不是件容易的事,后面我会继续尽可能的花时间更新完这个系列文章. 因这个系列的文章涉及的范围太大了 ...
- linux redis基础应用 主从服务器配置
Redis基础应用 redis是一个开源的可基于内存可持久化的日志型,key-value数据库redis的存储分为内存存储,磁盘存储和log文件三部分配置文件中有三个参数对其进行配置 优势:和memc ...
- [.net 面向对象程序设计深入](36)Redis——基础
[.net 面向对象程序设计深入](36)Redis——基础 很长一段时间没更新博客了,坚持做一件事,真不是件容易的事,后面我会继续尽可能的花时间更新完这个系列文章. 因这个系列的文章涉及的范围太大了 ...
- mysql主从复制、redis基础、持久化和主从复制
一.mysql(mariadb)基础 1.基础命令(centos7操作系统下) 1.启动mysql systemctl start mariadb 2.linux客户端连接自己 mysql -uroo ...
- Redis基础用法、高级特性与性能调优以及缓存穿透等分析
一.Redis介绍 Redis是一个开源的,基于内存的结构化数据存储媒介,可以作为数据库.缓存服务或消息服务使用.Redis支持多种数据结构,包括字符串.哈希表.链表.集合.有序集合.位图.Hype ...
- Redis基础知识补充及持久化、备份介绍(二)--技术流ken
Redis知识补充 在上一篇博客<Redis基础认识及常用命令使用(一)--技术流ken>中已经介绍了redis的一些基础知识,以及常用命令的使用,本篇博客将补充一些基础知识以及redis ...
- Spring-Boot之Redis基础
Spring-Boot之Redis基础 准备 Redis下载地址:github.com/MSOpenTech/redis/releases Redis数据库的默认端口号是 6379 开启Redis服务 ...
- mongodb,Mysql,redis基础教程
数据库基础 1:mongodb基础教程 1:pymongo基础教程 2:Mysql基础教程 3:redis基础教程
- Redis基础知识点面试手册
Redis基础知识点面试手册 基础 概述 数据类型 STRING LIST SET HASH ZSET(SORTEDSET) 数据结构 字典 跳跃表 使用场景 会话缓存 缓存 计数器 查找表 消息队列 ...
随机推荐
- iOS组件化开发一pod库包含MRC的文件处理(五)
在做项目的过程中,建立了一个私有pod库,在这个库中存在mrc类文件这个时候如果在使用了arc的工程中引用这个pod的工程中手动设置当然也可以就是费时费力.现在我们来看看如何在私有库配置文件里配置自动 ...
- Vue技术点整理-安装引入
Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架 所谓渐进式是指: 1,如果你有一个现成的web应用,你可以将vue作为该应用的一部分嵌入其中,带来更丰富的交互体验 ...
- 【POJ - 1979 】Red and Black(dfs+染色)
-->Red and Black Descriptions: 有个铺满方形瓷砖的矩形房间,每块瓷砖的颜色非红即黑.某人在一块砖上,他可以移动到相邻的四块砖上.但他只能走黑砖,不能走红砖. 敲个程 ...
- c++ 函数知识点汇总
c++ 函数知识点汇总 swap函数 交换两个数组元素 比如 swap(a[i],a[j]); 就是交换a[i] 和 a[j] 的值 strcpy() 复制一个数组元素的值到另一个数组元素里 strc ...
- 18.linux基础优化
1.linux系统的基础优化 (1)关闭selinux sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config 临时关闭 ...
- Unix及Linux编辑器vi/vim基本使用方法
- (CVE-2017-10271)weblogic12.1.3.0漏洞测试与打补丁过程
1.漏洞测试 搭建完成weblogic12.1.3.0后,开始用工具测试 点击connect,右下角显示connected,说明已连接→说明漏洞存在 CMD输入:ls ,然后点击Execute执行 ...
- POJ2533&&SP1799 The Bottom of a Graph(tarjan+缩点)
POJ2553 SP1799 我们知道单独一个强连通分量中的所有点是满足题目要求的 但如果它连出去到了其他点那里,要么成为新的强连通分量,要么失去原有的符合题目要求的性质 所以只需tarjan缩点求出 ...
- 个人永久性免费-Excel催化剂功能第67波-父子结构表转换添加辅助信息之子父关系篇
Excel作为一款数据领域的万物互联工具,连接一切外部的多种多样的数据源.将数据带到Excel的环境中,再进行数据处理.转换.统计分析等工作,是众多表哥表姐们每天都在经历的事情.能最快速将其他来源数据 ...
- 校园表白墙、微信表白墙、校园墙 微信小程序 JAVA 开发记录与分享
目录 最新版表白墙博客地址 1.微信小程序前台展示 2.功能介绍 3.后台管理 4.后端语言采用 JAVA 开发 5.体验此微信小程序 扫描下方二维码 6.如何联系我或需要源码进行联系 最新版表白墙博 ...