目录

Redis简介

NoSQL

Redis

Redis的应用

Redis 的数据存储类型介绍

String

string类型数据的操作

hash

hash类型数据的操作

list

list类型数据的操作

set

set类型数据的操作

sorted_set

sorted_set类型数据的操作

key通用操作

key特征

key基本操作

key扩展操作(时效性控制)

key扩展操作(查询模式)

key其他操作

数据库通用操作

db相关操作

Jedis简介

客户端连接redis

基于连接池获取连接


Redis简介

NoSQL

NoSQL:即Not-Nnly SQL(泛指菲关系型数据库),作为关系型数据库的补充。

作用:应对基于海量用户和海量数据前提下的数据处理问题。

特征:

  • 可扩容,可伸缩

  • 大数据量下高性能

  • 灵活的数据模型

  • 高可用

常见的NoSQL数据库有:

  • Redis
  • memcache
  • HBase
  • MongoDB

    Redis

概念:Redis(REmote DIctionary Service)是用c语言开发的一个开源的高性能键值对(key-value)数据库。

特征:

1. 数据间没有必然的关联关系

2. 内部采用单线程机制进行工作

3. 高性能。官方提供测试数据,50个并发执行100000个请求,读的速度是110000次/s,写的速度是81000次/s。

4. 多数据类型支持:

  • 字符串类型   String
  • 列表类型   List(LinkedList)
  • 散列类型   hash(HashMap)
  • 集合类型   set(HashSet)
  • 有序集合类型   sorted_set(TreeSet)

5. 持久化支持。可以进行数据灾难恢复

Redis的应用

  • 为热点数据加速查询(主要场景),如热点商品,热点新闻,热点资讯,推广类等高访问量信息等

  • 任务队列,如秒杀,抢购、购票排队等

  • 即时信息查询,如各种排行榜,各类网站访问统计,公交到站信息、在线人数信息等

  • 时效性信息控制,如验证码控制,投票控制等

  • 分布式数据共享,如分布式集群架构中的session分离

  • 消息队列

  • 分布式锁


Redis 的数据存储类型介绍

redis自身是一个Map,其中所有的数据都是采用key:value的形式存储。

数据类型指的是存储的数据的类型,也就是value部分的类型,key部分永远都是字符串。 

String

存储单个数据,是最简单的数据存储类型,也是最常用的数据存储类型,一个存储空间保存一个数据。

存储内容通常是字符串。如果字符串以整数的形式展示,可以作为数字操作使用。

string类型数据的操作

基本操作:

操作命令 命令功能 例子
set key value 添加或修改数据 set k1 v1
get key 获取数据 get k1
del key 删除数据 del k1
mset key1 value1 key2 value2... 添加或修改多个数据

mset k1 v1 k2 v2...

mget key1key2... 获取多个数据 mget k1 k2...
strlen key 获取数据字符的个数 strlen k1
append key value 追加信息到原始信息后部(如果原始信息存在就追加,否则新建) append k1 v2

扩展操作:

操作命令 命令功能

incr key

incrby key increment

incrbyfloat key increment

设置数值数据增加指定范围的值

decr key

decrby key increment

设置数值数据减少指定范围的值
  • string在redis内部存储默认就是一个字符串,当遇到增减类操作incr、decr时会转成数值型进行计算。
  • redis所有操作都是原子性的,采用单线程处理所有业务,命令是一个个执行的,一次无需考虑并发带来的数据影响。
  • 注意:按数值进行操作的数据,如果原始数据不能转成数值,或超过了redis数值上限的范围,将报错。

redis控制数据的生命周期,通过数据是否失效控制业务行为,适用于所有具有时效性限定控制的操作:

操作命令 命令功能
setex key seconds value 设置数据具有指定生命周期(秒为单位)
psetex key milliseconds value 设置数据具有指定生命周期(毫秒为单位)

key的设置约定:

hash

结构如图,一个key指向一个hash,hash里也是以键值对方式存储数据,即一个存储空间保存多个键值对数据;

底层是使用哈希表结构实现数据存储。

hash类型数据的操作

基本操作:

操作命令 命令功能
hset key field value 添加或修改数据

hget key field

hgetall key

获取数据
hdel key field1 [field2] 删除数据
hlen key 获取hash内数据的条数

扩展操作:

操作命令 命令功能

hkeys key

hvals key

获取哈希表中所有的字段名或字段值

hincrby key field increment

hincrbyfloat key field increment

设置指定字段的数值数据增加指定范围的值
hsetnx key field value

用于为哈希表中不存在的的字段赋值。

如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。

如果字段已经存在于哈希表中,操作无效。

如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令

注意事项:

  • hash类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象。如果数据未获取到,对应的值为(nil)
  • hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但是hash设计初衷不是为了存储大量对象而设计的,切记不可以滥用,更不可以将hash作为对象列表使用
  • hgetall操作可以获取全部属性,但是如果内部fiel 过多,遍历整体数据效率就会很低,有可能成为数据访问的瓶颈

list

有序;

可以存储多个数据并对数据进入存储空间的顺序进行区分;

可以保存多个数据,底层使用双向链表存储结构实现;

list类型数据的操作

基本操作:

操作命令 命令功能

lpush key value1 [value2] ...

rpush key value1 [value2] ...

从链表左边插入数据

从链表右边插入数据

lrange key start stop

获取列表指定范围内的元素,0 表示列表的第一个元素,-1表示最后一个元素
lindex key index 通过索引获取列表中的元素
llen key 获取列表长度

lpop key

rpop key

移出并获取列表的左边第一个元素;

移出并获取列表的右边第一个元素;

扩展操作:

操作命令 命令功能

blpop key1 [key2] timeout

移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
brpop key1 [key2] timeout 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
lrem key count value

移除列表中与参数 VALUE 相等的元素。

COUNT 的值可以是以下几种:

  • count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
  • count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
  • count = 0 : 移除表中所有与 VALUE 相等的值。

注意事项:

  • list中保存的数据都是string类型的,数据总容量是有限的,最多2的32次方-1个元素
  • list具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作,或以栈的形式进行入栈出栈
  • 获取全部数据操作结束索引设置为-1
  • list可以对数据进行分页操作,通常第一页的信息来自于list,第二页及更多信息通过数据库的形式加载

set

可以存储大量数据,在查询方面提供更高的效率;

与hash存储结构完全相同,仅存储键,不存储值(nil),并且值是不允许重复的(hashSet)。

set类型数据的操作

基本操作:

操作命令 命令功能
sadd key menber1 [menber2] 向集合添加一个或多个成员
smenbers key 返回集合中的所有成员
srem key menber1 [menber2] 移除集合中一个或多个成员
scard key 获取集合的成员数
sismenber key menber 判断 member 元素是否是集合 key 的成员

扩展操作:

操作命令 命令功能
srandmenber key [count] 返回集合中一个或多个随机数
spop key 移除并返回集合中的一个随机元素

Tip: redis 应用于随机推荐类信息检索,例如热点歌单推荐、热点新闻推荐、热卖旅游路线、应用APP推荐等。

操作命令 命令功能
sinter key1 [key2] 求两个集合的交集
sunion key1 [key2] 求两个集合的并集
sdiff key1 [key2] 求两个集合的差集
sinterstore destination key1 [key2] 返回给定所有集合的交集并存储在 destination 中
sunionstore destination key1 [key2] 返回给定所有集合的并集并存储在 destination 中
sdiffstore destination key1 [key2] 返回给定所有集合的差集并存储在 destination 中
smove source destination member 将 member 元素从 source 集合移动到 destination 集合

注意事项:

  • set类型不允许数据重复,若存入重复数据,会返回integer(0),报错信息
  • set虽然与hash存储结构相同,但是无法开启hash中存储值的空间

应用场景:

  • 利用set集合的数据去重的特征,记录各种访问数据
  • 建立string类型数据,利用incr统计访问量...

Tip:redis应用于同类型数据的快速去重。

sorted_set

数据排序有利于数据的有效展示,需要提供一种可以根据自身特征进行排序的方式;

相当于在set的存储结构基础上添加了可排序字段;

sorted_set类型数据的操作

基本操作:

操作命令 命令功能
zadd key score1 member [score2 menber2] 向有序集合添加一个或多个成员,或者更新已存在成员的分数
zrang key start stop [WITHSCORES] 通过索引区间返回有序集合指定区间内的成员
zrevrang key start stop [WITHSCORES] 返回有序集中指定区间内的成员,通过索引,分数从高到低
zrem key member [menber...] 移除有序集合中的一个或多个成员
zrangebyscore key min max [WITHSCORES] [LIMIT] 通过分数返回有序集合指定区间内的成员
zrevrangebyscore key max min [WITHSCORES] 返回有序集中指定区间内的成员,通过索引,分数从高到低
zremrangebyrank key start stop 移除有序集合中给定的排名区间的所有成员
zremrangebyscore key min max 移除有序集合中给定的分数区间的所有成员
zcard key 获取有序集合的成员数
zcount key min max 计算在有序集合中指定区间分数的成员数
zinterstore destination numkeys key [key ...] 计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 
zunionstore destination numkeys key [key...] 计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 

注意:

  • min与max用于限定搜索查询的条件
  • start与stop用于限定查询范围,作用于索引,表示开始和结束索引
  • offset于count用于限定查询范围,作用于查询结果,表示开始位置和数据总量

扩展操作:

操作命令 命令功能
zrank key member 返回有序集合中指定成员的索引
zrevrank key member 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
zscore key member 返回有序集中,成员的分数值
zincrby key increment member 有序集合中对指定成员的分数加上增量 increment

注意事项:

  • score保存的数据存储空间是64位
  • score保存的数据也可以是一个双精度的double值,基于双精度浮点数的特征,可能会丢失精度,使用时要慎重
  • sorted_set底层存储还是基于set结构的,因此数据不能重复,如果重复添加相同的数据,score值将会被反复覆盖,保留最后一次修改的结果

key通用操作

key特征

key是一个字符串,通过key获取redis中保存的数据

key基本操作

操作命令 命令功能
del key 删除指定key
exists key 获取key是否存在,若 key 存在返回 1 ,否则返回 0 
type key 获取key的类型

key扩展操作(时效性控制)

操作命令 命令功能
expire key seconds 为给定 key 设置过期时间,以秒计。
pexpire key milliseconds 设置 key 的过期时间以毫秒计。
expireat key timestamp EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。
pexpireat key milliseconds-timestamp 设置 key 过期时间的时间戳(unix timestamp) 以毫秒计
ttl key 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
pttl key 以毫秒为单位返回 key 的剩余的过期时间。
persist key 移除 key 的过期时间,key 将持久保持。

key扩展操作(查询模式)

操作命令 命令功能
keys pattern 查找所有符合给定模式( pattern)的 key 。

key其他操作

操作命令 命令功能
rename key newkey 重命名一个key。当 OLD_KEY_NAME 和 NEW_KEY_NAME 相同,或者 OLD_KEY_NAME 不存在时,返回一个错误。 当 NEW_KEY_NAME 已经存在时, RENAME 命令将覆盖旧值。
renamenx key newkey 仅当 newkey 不存在时,将 key 改名为 newkey 。
sort 对所有key排序()
help @generic 其他key通用操作

数据库通用操作

在redis中,key是由程序员定义的,伴随着操作数据量的增加,会出现大量数据以及对应的key,数据不区分种类,类别混杂在一起,极容易出现重复或冲突

解决办法:

  • redis为每个服务提供有16个数据库,编号从0到15
  • 每个数据库之间的数据相互独立

db相关操作

操作命令 命令功能
select index 切换数据库
quit 退出
ping 测试数据库连通性
echo message 打印信息
move key db 移动数据到某一个数据库

dbsize

flushdb

flushall

数据清除

Jedis简介

客户端连接redis

  • 连接redis
Jedis jedis = new Jedis("localhost",6379);
  • 操作redis
jedis.set("name","Ben");
jedis.get("name");
  • 关闭redis连接
jedis.close();

基于连接池获取连接

  • JedisPool:Jedis提供的连接池技术

poolConfig:连接池配置对象

host:redis服务地址

port:redis服务端口号

public JedisPool(final GenericObjectPoolConfig poolConfig, final String host, final int port) {this(poolConfig, host, port, Protocol.DEFAULT_TIMEOUT, null, Protocol.DEFAULT_DATABASE, null);}
public class JedisUtils {public static Jedis getJedis() {JedisPoolConfig config = new JedisPoolConfig();config.setMaxTotal(30);//最大连接数config.setMaxIdle(10);//活动连接数JedisPool jp = new JedisPool(config,"127.0.0.2",6379);return jp.getResource();}public static void main(String[] args) {Jedis jedis = JedisUtils.getJedis();jedis.set("name","hello");String name = jedis.get("name");System.out.println(name);//3,。关闭连接jedis.close();}
}

Redis学习笔记整理(黑马程序员视频课程)相关推荐

  1. jQuery学习笔记【黑马程序员】

    文章目录 前言 JQury学习 1.引入JQury 2.jqury简介 3.jQuery入口函数 4.dom对象与jQuery对象 4.1.dom对象 4.2.jQuery对象 4.3.jQuery对 ...

  2. 学习笔记:黑马程序员C++从0到1(3~4)

    黑马程序员C++从0到1入门编程 3 运算符 3.1 算术运算符 3.2 赋值运算符 3.3 比较运算符 3.4 逻辑运算符 4 程序流程结构 4.1 选择结构 4.1.1 If 语句 4.1.1.1 ...

  3. JavaScript学习笔记--【黑马程序员】

    目录 一.编程语言 1.1 编程 1.2 计算机语言 1.3 编程语言 1.4 翻译器 1.5 编程语言和标记语言区别 总结 二.计算机基础 2.1 计算机组成 2.2.数据存储 2.3 数据存储单位 ...

  4. 《C语言基础学习笔记》—— 黑马程序员 <Part1-4>

    <C语言基础学习笔记 Part1-4> Part 1 基础介绍 1. 第一个C语言程序:HelloWorld 1.1 编写C语言代码:hello.c 1.2代码分析 1)include 头 ...

  5. 软测学习笔记(黑马程序员)

    软件测试定义:使用技术手段验证软件是否满足使用需求. 7种测试分类的区别: 测试按阶段划分:1.单元测试(针对源代码测试)2.集成测试(针对接口测试)3.系统测试(针对功能非功能进行测试)4.验收测试 ...

  6. Maven学习笔记(黑马程序员)

    一.Maven简介 maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型POM(Project Object Modle) maven的作用:     1.项目构建:提供标准 ...

  7. ZooKeeper官方文档学习笔记03-程序员指南03

    我的每一篇这种正经文章,都是我努力克制玩心的成果,我可太难了,和自己做斗争. ZooKeeper官方文档学习笔记04-程序员指南03 绑定 Java绑定 客户端配置参数 C绑定 陷阱: 常见问题及故障 ...

  8. 2016最新整理黑马程序员JavaEE第28期 基础班就业班

    2016最新整理黑马程序员JavaEE第28期 基础班就业班 http://blog.sina.com.cn/s/blog_88d972910102wti3.html

  9. 黑马程序员的课程不如兄弟连兄弟会好

    [黑马程序员的课程不如兄弟连兄弟会好 兄弟连兄弟会it开发培训 www.itxdh.net 企鹅群:499956522 高端人才培养就到[兄弟连兄弟会it开发培训]纯免费的高端IT人才培养] 职场中的 ...

  10. 哔哩哔哩黑马程序员C++课程个人学习笔记

    写在前面:此博文仅作为个人c++学习笔记,或有错误不建议参考!!! 视频链接:黑马程序员c++教程从0到1 目录 一.第一部分c++基础 1.1 c++初识 1.1.1 hello world 1.1 ...

最新文章

  1. php仿攻击,PHP写的仿DDOS攻击程序代码
  2. 一个跨国银行的敏捷转型案例要点之全员培训
  3. Qt Creator查找和更换
  4. 国内知名互联网公司的开源项目
  5. serverless搭建html,基于ServerLess的极简网页计数器:源码分析与实践
  6. ubuntu apache配置负载均衡篇(二)
  7. java反射的使用概览
  8. Oracle 11g R2 ADG 运维
  9. 上手深度学习之前,我们先聊聊“数学”
  10. 【Flink】flink-1.12 通过 -t 指定模式后无法指定yarn参数
  11. 云端点保护解决方案行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  12. jenkins ssh远程执行命令 碰到的2个坑
  13. 大数据可视化陈为智慧树_知到智慧树大数据可视化网课答案
  14. HTML5 案例学习笔记
  15. Hadoop性能调优
  16. I 爆炸的符卡洋洋洒洒(牛客)01背包
  17. 拼多多上市了!社交电商的力量不容小觑!
  18. Linux下对TF卡进行分区
  19. 论文投稿指南——中文核心期刊推荐(原子能技术)
  20. 朱松纯访谈录:初探计算机视觉的三个源头人工智能

热门文章

  1. 2022最新短视频去水印解析API接口支持各大小程序
  2. 《Fortran 95 程序设计》阅读笔记三
  3. 怎样使用Google chrome播放 .swf 文件
  4. QT自定义3D图形控件,支持轴拖动。
  5. 怎么制作真人qq秀_真人秀---搏击赛事新风向标的机与忧
  6. 知识图谱 - 知识体系构建与知识融合
  7. 打造黑苹果(一)组装硬件的选择与组装
  8. js遍历对象去除空格
  9. 淦!看了 B 站上的这些 Python 视频,我站起来了!
  10. bootice工具修复linux,bootice工具怎么修复引导win7