Redis解读(1):Redis安装启动及常见数据类型
Redis 简介
Redis 是我们在互联网应用中使用最广泛的一个 NoSQL 数据库,基于 C 开发的键值对存储数据库。
Redis 这个名字是 Remote Dictionary Service 字母缩写。
很多人想到 Redis,就想到缓存。但实际上 Redis 除了缓存之外,还有许多更加丰富的使用场景。比如分布式锁,限流。
Redis 特点
- 支持数据持久化
- 支持多种不同的数据结构类型之间的映射
- 支持主从模式的数据备份
- 自带了发布订阅系统
- 定时器、计数器
redis的安装
四种方式获取一个 Redis:
直接编译安装(推荐使用)
提前准备好 gcc 环境
yum install gcc-c++
接下来下载并安装 Redis:
wget https://download.redis.io/releases/redis-6.2.1.tar.gz
tar -zxvf redis-6.2.1.tar.gz
cd redis-6.2.1/
make
make install
安装完成后,启动 Redis:
redis-server redis.conf
启动成功页面如下:

使用Docker
Docker 安装好之后,启动 Docker ,直接运行安装命令即可,启动后返回容器运行的ID
docker run --name taoguoguo-redis -d -p 6379:6379 redis --requirepass 123
我们先查看运行在Docker上的redis容器
docker ps

确保容器正在运行后,可以从宿主机上连接(前提是宿主机上存在 redis-cli),因为第一种编译安装方式我们已经在宿主机上安装了redis 所以可以直接使用宿主机的命令行工具
#redis-cli 客户端命令 默认参数有地址 -h 127.0.0.1 端口 -p 6379 密码 -a '123'
redis-cli -a 123

宿主机客户端,连接成功!
如果宿主机上没有安装 Redis,那么也可以进入到 Docker 容器种去操作 Redis:
#1.退出当前redis
exit
#2.进入Redis容器
docker exec -it taoguoguo-redis redis-cli -a 123

也可以直接安装
CentOS
yum install redis
Ubuntu
apt-get install redis
Mac
brew install redis
通过在线体验,使用Redis的相关功能 http://try.redis.io/
redis的后台启动
首先,修改 redis.conf 配置文件,将daemonize 守护线程启动方式开启

配置完成后,保存退出,启动 redis
redis-server redis.conf
redis的数据类型
String
String 是 Redis 里边最最简单的一种数据结构。在 Redis 中,所以的 key 都是字符串(序列化后的字符串),但是,不同的 key 对应的 value 则具备不同的数据结构,我们所说的五种不同的数据类型,主要是指 value 的数据类型不同。
Redis 中的字符串是动态字符串,内部是可以修改的,像 Java 中的 StringBuffer,它采用分配冗余空间的方式来减少内存的频繁分配。在 Redis 内部结构中,一般实际分配的内存会大于需要的内存,当字符串小于 1M 的时候,扩容都是在现有的空间基础上加倍,扩容每次扩 1M 空间,最大 512M。
set
set 就是给一个 key 赋值的。

append
使用 append 命令时,如果 key 已经存在,则直接在对应的 value 后追加值,否则就创建新的键值对。

decr
可以实现对 value 的减 1 操作(前提是 value 是一个数字),如果 value 不是数字,会报错,如果value 不存在,则会给一个默认的值为 0,在默认值的基础上减一。

decrby
和 decr 类似,但是可以自己设置步长,该命令第二个参数就是步长。
比如把K3 的值 减10 设置每次递减的步长为10即可

get
get 用来获取一个 key 的 value。

getrange
getrange 可以用来返回 key 对应的 value 的子串,这有点类似于 Java 里边的 substring。这个命令第二个和第三个参数就是截取的起始和终止位置,其中,0表示起始字符串,-1 表示最后一个字符串,-2 表示倒数第二个字符串,以此类推...

注意:原来存在在redis中 key对应的value 不会发生改变
getset
获取并更新某一个 key。

incr
给某一个 key 的 value 自增

incrby
给某一个 key 的 value 自增,同时还可以设置步长

incrbyfloat
和 incrby 类似,但是自增的步长可以设置为浮点数。 incrby 是不可以增加浮点数的

mget 和 mset
批量获取和批量存储

ttl
查看 key 的有效期, -1 代表永远不会过期 , -2 代表已经过期

setex
在给 key 设置 value 的同时,还设置过期时间,时间到了

psetex
和 setex 类似,只不过这里的时间单位是毫秒(1000ms = 1s)。

setnx
默认情况下, set 命令会覆盖已经存在的 key,setnx 则不会。

msetnx
批量设置,如果有一个存在,整个操作会失败。

setrange
指定offset(偏移量) 覆盖一个已经存在的 key 的value

strlen
查看字符串长度

String(BIT) 相关命令
在 Redis 中,字符串都是以二进制的方式来存储的。例如 set k1 a,a 对应的 ASCII 码是 97,97 转为二进制是 01100001,BIT 相关的命令就是对二进制进行操作的。
getbit
key 对应的 value 在 offset 处的 bit 值

setbit
修改 key 对应的 value 在 offset 处的 bit 值

bitcount
统计二进制数据中 1 的个数, 采用位

bitCount应用场景举例,假设我要记录测算系统每个用户当前登录的次数,比如用户名为: taoguoguo
#命令如下
setbit key 当前登录次数 偏移量
#第一次登录
setbit taoguoguo 1 1
#第二次登录
setbit taoguoguo 2 1
#第三次登录
setbit taoguoguo 3 1
#当前登录次数统计
bitcount taoguoguo

List
Redis中的List实际上是一个string类型的双向链表,因此既可以做栈也可以做队列来使用。不同的是栈是先进后出,队列是先进先出。链表被广泛地用于实现Redis的各种功能,如列表键、发布与订阅、慢查询、监视器等。Redis中单个List可容纳2^32-1约40亿个元素
链表的特点:
- 链表中的元素是有序的,可通过索引下标来获取某个元素或某个范围内的元素列表。
- 链表中的元素是可以重复的
lpush
将所有指定的值插入到存于 key 的列表的头部。如果 key 不存在,那么在进行 push 操作前会创建一个空列表。 如果 key 对应的值不是一个 list 的话,那么会返回一个错误。

rpush
向存于 key 的列表的尾部插入所有指定的值。

lrange
返回列表指定区间内的元素,索引从0开始,-1为最后一个。

lpop
移除并返回列表的头元素。

rpop
移除并返回列表的尾元素。

lindex
返回列表中,下标为 index 的元素。

ltrim
ltrim 可以对一个列表进行修剪,类似于subList。

blpop/brpop
阻塞式的弹出,相当于 lpop 的阻塞版,如果当前List数据为空,那么在阻塞时长内如果有添加元素 会进行弹出,如果没有元素加入,命令超过时间自动停止。

另一客户端在阻塞时间加入新元素至k1链表

Set
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
集合中最大的成员数为 2^32 - 1 (4294967295, 每个集合可存储40多亿个成员)。
sadd
添加元素到一个 key 中

smembers
获取一个 key 下的所有元素

srem
移除指定的元素

sismemeber
返回某一个成员是否在集合中, 0 代表不存在, 1表示存在

scard
返回集合的数量

srandmember
随机返回一个元素

spop
随机返回并且出栈一个元素

smove
把一个元素从一个集合移到另一个集合中去

sdiff
返回两个集合的差集,不同集合的顺序,差集结果是不一样的

sinter
返回两个集合的交集

sdiffstore
这个类似于 sdiff ,不同的是,计算出来的结果会保存在一个新的集合中

sinterstore
类似于 sinter,只是将计算出来的交集保存到一个新的集合中

sunion
求并集

sunionstore
求并集并且将结果保存到新的集合中

Hash
Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
Redis 中每个 hash 可以存储 2^32 - 1 键值对(40多亿)。
hset
添加值

hget
获取值

hmset
批量设置

hmget
批量获取

hdel
删除一个指定的 field

hsetnx
默认情况下,如果 key 和 field 相同,会覆盖掉已有的 value,hsetnx 则不会

hvals
获取所有的 value

hkeys
获取所有的 key

hgetall
同时获取所有的 key 和 value

hexists
返回 field 是否存在, 0 不存在, 1存在

hincrby
给指定的 value 自增

hincrbyfloat
可以自增一个浮点数

hlen
返回 某一个 key 中 value 的数量

hstrlen
返回某一个 key 中的某一个 field 的字符串长度

ZSet
Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
zadd
将指定的元素添加到有序集合中

zscore
返回 member 的 score 值

zrange
返回集合中的一组元素,可以加上 withscores 连同分数一起返回


zrevrange
返回一组元素,但是是倒序

zcard
返回元素个数

zcount
返回 score 在某一个区间内的元素,默认是闭区间,如果要开区间 在 score值 前面加上 (

zrangebyscore
按照 score 的范围返回元素

zrank
返回元素的排名(从小到大)

zrevrank
返回元素排名(从大到小)

zincrby
score自增

zinterstore
给两个集合求交集,给交集求和

zrem
弹出一个元素

zlexcount
计算有序集合中成员数量

zrangebylex
返回指定区间内的成员

Key相关操作
del
删除一个 key/value

dump
序列化给定的 key

exists
判断一个 key 是否存在

ttl
查看一个 key 的有效期 , -1 永不过期 , -2 已经过期

expire
给一个 key 设置有效期,如果 key 在过期之前被重新 set 了,则过期时间会失效

persist
移除一个 key 的过期时间

keys *
查看所有的 key

pttl
和 ttl 一样,只不过这里返回的是毫秒

数据类型总结
- 四种数据类型(list/set/zset/hash),在第一次使用时,如果容器不存在,就自动创建一个
- 四种数据类型(list/set/zset/hash),如果里边没有元素了,那么立即删除容器,释放内存。
Redis解读(1):Redis安装启动及常见数据类型的更多相关文章
- 在windows 下安装启动redis
在windows环境下安装 redis这个需要在github中下载开源代码,https://github.com/mythz/redis-windows 下载最近的zip包然后 解压到任意一个盘符中进 ...
- [转]在Ubuntu 下安装Redis 并使用init 脚本启动
1. 下载安装: cd /tmp wget http://redis.googlecode.com/files/redis-2.2.4.tar.gz tar -zxf redis-2.2.4.ta ...
- Redis 安装 启动 连接 配置 重启
Linux下安装 ]# wget http://download.redis.io/releases/redis-2.8.17.tar.gz ]# .tar.gz ]# cd redis- ]# ma ...
- redis 安装启动及设置密码<windows>
redis 1. 安装 1.1 下载解压包,直接解压到任意路径下即可 windows下载地址:ttps://github.com/MSOpenTech/redis/releases 2.启动 2.1 ...
- redis 安装启动
1.解压 tar -zxvf redis文件 2. make 3. cp redis-server redis-cli /usr/local/redis cp redis.conf /usr/loca ...
- Redis入门篇(安装与启动)
一.Redis介绍 Redis是NoSql的一种,在弄清楚Redis是个什么玩意之前,先了解下NoSql是什么.1.什么是NoSql NoSql,全名:Not Only Sql,是一种非关系型数据库, ...
- [redis] mac下redis安装、设置、启动停止
From: https://www.cnblogs.com/shoren/p/redis.html 下载安装 需要下载release版本,下载地址: http://download.redis.io/ ...
- Linux 下的 Redis 安装 && 启动 && 关闭 && 卸载
转自https://blog.csdn.net/zgf19930504/article/details/51850594 Redis 在Linux 和 在Windows 下的安装是有很大的不同的,和通 ...
- Window安装Redis并设置为开机启动
一.下载windows版本的Redis 去官网找了很久,发现原来在官网上可以下载的windows版本的,现在官网以及没有下载地址,只能在github上下载,官网只提供linux版本的下载 官网下载地址 ...
随机推荐
- PBN离场定高转弯保护区插件发布测试
昨天2月29日,是四年才有一次的日子,本想着应该写点什么,但一测试发现还有问题,只能先放下. 今天是三月份的第一天,一年已经过去了六分之一.疫情的关系,原本并不紧急的工作,现在也开始积压的有些多了,时 ...
- IDEA如何快速查看类中的属性和方法?
在idea中,当需要快速的查看一个类的所有属性和方法时,直接去代码中查看,就显得非常的麻烦,idea是有快捷键的,可显示所有的属性和方法,方法如下. 打开一个类,使用快捷键ALT+7,就可以在左侧看到 ...
- Hyperf-事件机制+异常处理
Hyperf-事件机制+异常处理 标签(空格分隔): php, hyperf 异常处理器 在 Hyperf 里,业务代码都运行在 Worker 进程 上,也就意味着一旦任意一个请求的业务存在没有捕获处 ...
- EFCodeFirst关系映射约定
EFCodeFirst关系映射约定 EFCodeFirst 关系映射约定 默认多重关系的一些约定规则: 1.一对多关系 两个类中分别包含一个引用和一个集合属性. 两个类中一个类包含另一个类的引用属性. ...
- 【转+】以C++为核心语言的高频交易系统的讨论
[前言]高频交易是量化交易的核心.主要分两个方向:计算机技术和交易策略.策略各有不同,一般都是数据分析的专家或者金融,机器学习从业者.在计算机技术方面,一个是交易平台的性能,二者是硬件的性能,延时的多 ...
- 使paramiko库执行命令时,在给定的时间强制退出
原因: 使用paramiko库ssh连接到远端云主机上时,非常偶现卡死现象,连接无法退出(可以是执行命令时云主机重启等造成).需要给定一段时间,不管命令执行是否卡住,都退出连接,显示命令执行超时错误. ...
- Linux 虚拟文件系统四大对象:超级块、inode、dentry、file之间关系
更多嵌入式原创文章,请关注公众号:一口Linux 一:文件系统 1. 什么是文件系统? 操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统. 通常文件系统是用于存储和组织文件的一 ...
- 使用python进行接口自动化测试,批量执行测试用例
工作中,使用python的requests库进行接口自动化测试是一个比较不错的选择,今天就以某网站的免费接口为例,展示以get请求进行批量执行测试用例.话不多说直接开讲 分析一下接口信息, 请求地址: ...
- 通过序列号Sequence零代码实现订单流水号
序列号管理 本文通过产品编码和订单流水号介绍一下序列号(Sequence)在crudapi中的应用. 概要 序列号 MySQL数据库没有单独的Sequence,只支持自增长(increment)主键, ...
- SpringBoot启动流程原理解析(二)
在上一章我们分析了SpingBoot启动流程中实例化SpingApplication的过程. return new SpringApplication(primarySources).run(args ...