分布式数据存储 之 Redis(一) —— 初识Redis

为什么要学习并运用Redis?Redis有什么好处?我们步入Redis的海洋,初识Redis。

一、Redis是什么

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。(来自官方的官方的解释!)

二、Redis的运用场景

​ 1.高频访问

​ 2.热点数据

​ 3.固定不变的数据

​ 4.读写比列读操作较高的数据

等等,还有更多的运用场景,这是Redis特性所决定的!

三、Redis可以做什么

​ 1.数据库

​ 2.缓存

​ 3.消息中间件

​ 4.注册中心

​ 5.分布式锁 (另一种实现方式:zookeeper)

四、Redis常见的数据结构

Redis支持多种类型的数据结构,如 字符串(strings)散列(hashes)列表(lists)集合(sets)有序集合(sorted sets) 与范围查询, bitmapshyperloglogs地理空间(geospatial) 索引半径查询。

1.strings

字符串

常用命令

1.设置或获取值

​ 通常用SET commandGET command来设置和获取字符串值

例:

> set mykey somevalue
OK
> get mykey
"somevalue"

参数:

​ **ex ** :

​ 过期时间(秒)

nx

​ 当key存在时SET会失败,或相反的,当key不存在时它只会成功。

​ 2.修改或查询键空间

​ 1.判断是否存在

exists

exists mykey

返回1或0标识给定key的值是否存在

​ 2.删除

del

del mykey

返回1或0标识值是被删除(值存在)或者没被删除(key对应的值不存在)

​ 3.查看存储类型

type

type myket

返回key对应的值的存储类型

3.Redis超时:数据在限定时间内存活

expire

expire key 5

设置超时时间,也可再次强调改变超时时间

使用 PERSIST 命令去除超时时间

参数

ex

set key 100 ex 10

在创建值的时候设置超时时间

ttl

ttl key

查看key对应的值剩余存活时间

4.转换为 整型

incr

incr mykey

​ 将key 转换为 整型

2.hashes

散列

数据结构类似于Map<Object,Map<Object,Object>>

看起来就像一个 “hash” 的样子,由键值对组成

常用命令

hmset

hmset person name admin age 10

设置 hash 中的多个域

hget

hget person age

取回单个域

例:

> hmset person name admin age 10
OK
> hget person age
"10"

3.lists

列表

常用命令

lpush

rpush mylist A

向list的左边(头部)添加一个新元素

rpush

lpush mylist first

向list的右边(尾部)添加一个新元素

lrange

lrange mylist 0 -1

从list中取出一定范围的元素



带有两个索引,一定范围的第一个和最后一个元素

从尾部开始计数,因此-1表示最后一个元素,-2表示list中的倒数第二个元素,以此类推。

rpop

rpop mylist

从list中删除元素并同时返回删除的值。可以在左边或右边操作

例:

> lpush list 1
(integer) 1
> rpush list 3
(integer) 2
> lrange list 0 10
6) "1"
7) "3"
> rpop list
"3"

4.sets

集合

更适合不重复的数据类型

常用命令

sadd

sadd myset 1 2 3

把新的元素添加到 set 中

smembers

smembers myset

查看

例:

127.0.0.1:6379> sadd myset 1 2 3
(integer) 3
127.0.0.1:6379> smembers myset
1) "1"
2) "2"
3) "3"

五、事务

MULTIEXECDISCARDWATCH 是 Redis 事务相关的命令。事务可以一次执行多个命令, 并且带有以下两个重要的保证:

  • 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
  • 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。

命令

MULTI

​ 用于开启一个事务,它总是返回 OK

EXEC

​ 负责触发并执行事务中的所有命令

例:

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set name 10
QUEUED
127.0.0.1:6379> set name a
QUEUED
127.0.0.1:6379> incr name
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
3) (error) ERR value is not an integer or out of range

DISCARD

​ 事务放弃, 事务队列会被清空, 并且客户端会从事务状态中退出

例:

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set name 100
QUEUED
127.0.0.1:6379> discard
OK
127.0.0.1:6379> get name
"a"

WATCH

​ 使得 EXEC 命令需要有条件地执行

​ 可以为 Redis 事务提供 check-and-set (CAS)行为

​ 监控某些值,防止该值在十五提交过程中被其他客户端改变

WATCH mykey
val = GET mykey
val = val + 1
MULTI
SET mykey $val
EXEC # 若值为nil 说明修改失败

事务中的错误

入队前

​ 大部分客户端都会停止并取消这个事务

入队后

​ 命令可能在 EXEC 调用之后失败。

​ 事务正常执行,不会影响已经入队的结果

为什么 Redis 不支持回滚(roll back)

​ Redis 命令只会因为错误的语法而失败(并且这些问题不能在入队时发现),或是命令用在了错误类型的键上面

六、Redis 在 Docker 中的运用

操作步骤

  1. 拉去 Redis 5.0.4镜像

    docker pull redis:5.0.4

  2. 启动 Redis

    docker run --name redis -p 6379:6379 redis:5.0.4 redis-server --appendonly yes

  3. 进入Redis 容器内部

    docker exec -it redis /bin/bash

  4. 连接服务端

    redis-cli

    参数

    ​ -h hostname

    ​ -p port

    ​ -n db(0~15)Database number

分布式数据存储 之 Redis(一) —— 初识Redis的更多相关文章

  1. redis之一初识redis

    本文主要围绕以下几点进行阐述: 1.什么是redis? 2.为什么要使用redis呢? 3.redis的一些基本配置 4.redis的缺点? 正文: 1.什么是redis? Redis是一款内存高速缓 ...

  2. redis(一)-----初识redis

    Redis是一种基于键值对(key-value)的NoSQL数据库 因为Redis会将所有数据都存放在内存 中,所以它的读写性能非常惊人.不仅如此,Redis还可以将内存的数据利 用快照和日志的形式保 ...

  3. Redis(1) 初识Redis

    redis介绍: Redis是一个开源(BSD许可)的内存数据结构存储,用作数据库,缓存和消息代理.它支持数据结构,如字符串(String),哈希(Hash),列表(List),集合(Set),具有范 ...

  4. 分布式数据存储 之 Redis(二) —— spring中的缓存抽象

    分布式数据存储 之 Redis(二) -- spring中的缓存抽象 一.spring boot 中的 StringRedisTemplate 1.StringRedisTemplate Demo 第 ...

  5. 初识Redis系列之四:.net使用Redis存储数据

    首先Redis在Windows上的安装前面的文章已经介绍过,这里不介绍了,直奔主题, 直接来看看.net怎么使用Redis 首先需要引用redis相关的dll,两个途径,意识网上下载编译好的dll : ...

  6. 初识redis数据类型

    初识redis数据类型 1.String(字符串) string是redis最基本的类型,一个key对应一个value. string类型是二进制安全的.意思是redis的string可以包含任何数据 ...

  7. Redis——学习之路三(初识redis config配置)

    我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息.     ...

  8. Redis——学习之路二(初识redis服务器命令)

    上一章我们已经知道了如果启动redis服务器,现在我们来学习一下,以及如何用客户端连接服务器.接下来我们来学习一下查看操作服务器的命令. 服务器命令: 1.info——当前redis服务器信息   s ...

  9. redis实战笔记(1)-第1章 初识Redis

    第1章 初识Redis 注:本书在redis3.0版本的,比如redis3.0以后支持服务端集群.3.0之前只能客户端分片.    本章主要内容 1.Redis与其他软件的相同之处和不同之处 2.Re ...

随机推荐

  1. 在无代码文件的aspx文件中添加类、函数和字段的方法

    大家都知道,在开始WebForm程序时,一个WebForm由.cs代码文件与.aspx页面文件组成.在aspx文件中可以嵌入C#代码,但无法在aspx的嵌入C#代码中定义类,函数和字段等.这样,就限制 ...

  2. js 中整理(一)

    一. 冒泡与冒泡阻止   var arr={5,0,-56,900,12,9000,-123}; var flag=false; //大的排序次数(arr.length-1) for(var i=0; ...

  3. 数据结构之 栈与队列--- 走迷宫(深度搜索dfs)

    走迷宫 Time Limit: 1000MS Memory limit: 65536K 题目描述 一个由n * m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m),每次可以向上下左右四个方 ...

  4. MYSQL初级学习笔记七:MySQL中使用正则表达式!(视频序号:初级_44)

    知识点九:MySQL中使用正则表达式(44) (1):REGEXP‘匹配方式’: (2):常用匹配方式: 模式字符 ^ 匹配字符开始的部分 $ 匹配字符串结尾的部分 . 代表字符串中的任意一个字符,包 ...

  5. javascript 无刷新上传图片之原理

    刚开始我认为可以像ajax 那样获取到数据然后通过ajax 发送请求,后来发现浏览器为了客户端的安全默认并没有给javascript 这个权限.这个方法当然是行不同了.我看了好像开源的上传图片原理,当 ...

  6. C++数组作为函数参数的几个问题(转)

    本文需要解决C++中关于数组的2个问题:1. 数组作为函数参数,传值还是传址?2. 函数参数中的数组元素个数能否确定? 先看下面的代码. #include <iostream> using ...

  7. solr安装-tomcat单机版

    今天又装了一次solr,之前太忙没顾得上写安装文档,今天抽时间记录下来安装过程,供小白们参考. 1. 准备工作 1. 服务器:linux 2.web服务器apache-tomcat,我的路径:/usr ...

  8. java类成员访问权限总结(private,default,protected,public)

  9. 单片机知识是Linux驱动开发的基础之一

    这是arm裸机1期加强版第1课第2节课程的wiki文字版. 为什么没前途也要学习单片机? 因为它是个很好的入口. 学习单片机可以让我们抛开复杂的软件结构,先掌握硬件操作,如:看原理图.芯片手册.写程序 ...

  10. JavaScript-Tool:jquery.jsprint.js

    ylbtech-JavaScript-Tool:jquery.jsprint.js 一个通过单击页面按钮,便实现页面打印的jQuery插件jqprint. 1.返回顶部 1. 插件描述:一个通过单击页 ...