分布式数据存储 之 Redis(一) —— 初识Redis
分布式数据存储 之 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) 与范围查询, bitmaps, hyperloglogs 和地理空间(geospatial) 索引半径查询。
1.strings
字符串
常用命令
1.设置或获取值
通常用SET command 和 GET 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"
五、事务
MULTI 、 EXEC 、 DISCARD 和 WATCH 是 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 中的运用
操作步骤
拉去 Redis 5.0.4镜像
docker pull redis:5.0.4
启动 Redis
docker run --name redis -p 6379:6379 redis:5.0.4 redis-server --appendonly yes
进入Redis 容器内部
docker exec -it redis /bin/bash
连接服务端
redis-cli
参数
-h hostname
-p port
-n db(0~15)Database number
分布式数据存储 之 Redis(一) —— 初识Redis的更多相关文章
- redis之一初识redis
本文主要围绕以下几点进行阐述: 1.什么是redis? 2.为什么要使用redis呢? 3.redis的一些基本配置 4.redis的缺点? 正文: 1.什么是redis? Redis是一款内存高速缓 ...
- redis(一)-----初识redis
Redis是一种基于键值对(key-value)的NoSQL数据库 因为Redis会将所有数据都存放在内存 中,所以它的读写性能非常惊人.不仅如此,Redis还可以将内存的数据利 用快照和日志的形式保 ...
- Redis(1) 初识Redis
redis介绍: Redis是一个开源(BSD许可)的内存数据结构存储,用作数据库,缓存和消息代理.它支持数据结构,如字符串(String),哈希(Hash),列表(List),集合(Set),具有范 ...
- 分布式数据存储 之 Redis(二) —— spring中的缓存抽象
分布式数据存储 之 Redis(二) -- spring中的缓存抽象 一.spring boot 中的 StringRedisTemplate 1.StringRedisTemplate Demo 第 ...
- 初识Redis系列之四:.net使用Redis存储数据
首先Redis在Windows上的安装前面的文章已经介绍过,这里不介绍了,直奔主题, 直接来看看.net怎么使用Redis 首先需要引用redis相关的dll,两个途径,意识网上下载编译好的dll : ...
- 初识redis数据类型
初识redis数据类型 1.String(字符串) string是redis最基本的类型,一个key对应一个value. string类型是二进制安全的.意思是redis的string可以包含任何数据 ...
- Redis——学习之路三(初识redis config配置)
我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息. ...
- Redis——学习之路二(初识redis服务器命令)
上一章我们已经知道了如果启动redis服务器,现在我们来学习一下,以及如何用客户端连接服务器.接下来我们来学习一下查看操作服务器的命令. 服务器命令: 1.info——当前redis服务器信息 s ...
- redis实战笔记(1)-第1章 初识Redis
第1章 初识Redis 注:本书在redis3.0版本的,比如redis3.0以后支持服务端集群.3.0之前只能客户端分片. 本章主要内容 1.Redis与其他软件的相同之处和不同之处 2.Re ...
随机推荐
- mysql 发生系统错误1067
一般是由配置文件错误语法不正确引起的,如my.ini本人在mysql mysql-5.6.29-winx64 配置过程中遇到“发生系统错误1067”主要由于下面两个目录写的格式不正确引起的正确写法如下 ...
- codeforces 459 A. Pashmak and Garden 解题报告
题目链接:http://codeforces.com/problemset/problem/459/A 题目意思:给出两个点的坐标你,问能否判断是一个正方形,能则输出剩下两点的坐标,不能就输出 -1. ...
- Java经典算法大全
1.河内之塔.. 2.Algorithm Gossip: 费式数列. 3. 巴斯卡三角形 4.Algorithm Gossip: 三色棋 5.Algorithm Gossip: 老鼠走迷官(一) 6. ...
- ThreadPoolExecutor之二:jdk实现的线程池介绍
一 简介 线程的使用在java中占有极其重要的地位,在jdk1.4极其之前的jdk版本中,关于线程池的使用是极其简陋的.在jdk1.5之后这一情况有了很大的改观.Jdk1.5之后加入了java.uti ...
- POJ 1737 经典DP
问题:求含有n个点的连通图的个数. 解: 考虑DP,$f(n)$表示n个点,每个点都和点1相连,且n个点互相连通的图的个数. (蓝字非常重要,这个条件有效地避免了重复计算) $g(n)$表示n个点,每 ...
- LXC安装
#安装lxcsudo apt-get install lxc#创建一个容器,会出现下图选择的界面 lxc-create -t download -n my-container #开启lxc-start ...
- 005--linux基础一作业
1.最小化安装centos7操作系统 2.新增硬盘分两个分区,两个分区的文件系统依次为ext4和xfs 3.将两个文件系统分别挂在到/mnt和/opt目录 4.新增普通用户egon并采用无需重复确认的 ...
- hibernate的基础学习--一对多关联
基本的用户和部门类,只有uuid和名称,没有其余字段. 配置文件 部门: <?xml version="1.0" encoding="utf-8" ?&g ...
- Android.mk中call all-subdir-makefiles和call all-makefiles-under,$(LOCAL_PATH)的区别(转载)
转自:http://blog.csdn.net/jackyu613/article/details/5949324 在写Android.mk文件时,call all-subdir-makefiles和 ...
- 天天坐在电脑面前,小心抑郁!来自一个人的旅行<自导自演>
画图画累了?写代码写累了?何不放松一下呢. 一望无际.亲近自然.忘乎所以.放空自我! 一个人的旅行, GoPro拍摄,后期采用FCPX.记录梦想, 自导自演.一个人去了很多地方, 认识和很多当地人,交 ...