Redis第二讲【Redis基本命令和五大数据结构】
【二、Redis基本命令和五大数据结构】
redis的基础知识和命令
redis 是一个单进程(包装epoll函数来对读写事件进行相应)
默认有16个数据库,初始使用的数据库为0号库
默认端口为6379
select :切换数据库
dbsize:查看当前库的key的个数
flushdb:清空当前库
flushall:清空所有库
redis的五大数据类型
key键
keys *:查看当前所有库的key
127.0.0.1:6379> keys *
1) "k1"
2) "k2"
key xxx*:查看以xxx开头的key
127.0.0.1:6379> keys k*
1) "k1"
2) "k2"
exists key:判断key是否存在;存在返回1;不存在返回0
127.0.0.1:6379> exists k1 #存在
(integer) 1
127.0.0.1:6379> exists k3 #不存在
(integer) 0
move key db:将某个key移动到某个db库,成功返回1失败为0
127.0.0.1:6379> move k1 1
(integer) 1
127.0.0.1:6379> get k1 #因为k1被移动到1号库所以查询不到
(nil)
127.0.0.1:6379> move k1 1
(integer) 0
expire key:设置过期时间(单位是秒)
127.0.0.1:6379> expire k2 10
(integer) 1
persist key:移除过期时间变成永不过期,成功返回1
127.0.0.1:6379> expire k1 500
(integer) 1
127.0.0.1:6379> ttl k1
(integer) 497
127.0.0.1:6379> persist k1
(integer) 1
127.0.0.1:6379> ttl k
(integer) -1
ttl key:查看key的过期状态,-1永不过期,-2已经过期
127.0.0.1:6379> expire k2 10
(integer) 1
127.0.0.1:6379> ttl k2
(integer) 7
127.0.0.1:6379> ttl k2
(integer) -2
127.0.0.1:6379> ttl k1
(integer) -1
del key :删除key
127.0.0.1:6379> del k1
(integer) 1
type key:返回key的类型
127.0.0.1:6379> type k2
string 127.0.0.1:6379> type k2
string
string
set:添加
127.0.0.1:6379> set k1 v1
OK
get:获得
127.0.0.1:6379> get k1
"v1"
del:删除
127.0.0.1:6379> del k1
(integer) 1
append key xxx:往key后面添加xxx
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> append k1 123456
(integer) 8
127.0.0.1:6379> get k1
"v1123456"
strlen:获取key的长度
127.0.0.1:6379> strlen k1
(integer) 8
Incr key:累加 只能是数字相加减不然会报错
decr key:累减
127.0.0.1:6379> lncr k1
(error) ERR unknown command `lncr`, with args beginning with: `k1`,
127.0.0.1:6379> set k2 11
OK
127.0.0.1:6379> INCR k2
(integer) 12
127.0.0.1:6379> decr k2
(integer) 11
incrby key n:累加n
decrby key n:累减n
127.0.0.1:6379> set k2 11
OK
127.0.0.1:6379> incrby k2 9
(integer) 20
127.0.0.1:6379> decrby k2 10
(integer) 10
getrange key 0 -1 获取key的范围值 0 -1 表示全长的值
127.0.0.1:6379> getrange k1 0 2 #获取下标0-2
"v11"
127.0.0.1:6379> getrange k1 0 -1 #获取总长度
"v1123456"
setrange key n xxx 更换key下标以n开始后面的值
127.0.0.1:6379> setrange k1 0 54321
(integer) 8
127.0.0.1:6379> get k1
"54321456"
mset :批量添加
mget:批量查找
msetnx:批量添加很多值 只要存在其中一个key,所有的key都会存不上
127.0.0.1:6379> mset k3 k3 k4 v4
OK
127.0.0.1:6379> mget k3 k4
1) "k3"
2) "v4"
127.0.0.1:6379> msetnx k5 v3 k4 v4
(integer) 0
127.0.0.1:6379> mget k4 k5
1) "44"
2) (nil)
getset:先取值在设置值
127.0.0.1:6379> getset k5 v5
(nil)
127.0.0.1:6379> getset k4 v5
"44"
127.0.0.1:6379> get k4
"v5"
list(简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边))
lpush:反添加
rpush:正添加
lrange:查看
127.0.0.1:6379> lpush k1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> LRANGE k1 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> rpush k2 1 2 3 4 5
(integer) 5
127.0.0.1:6379> LRANGE k2 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
lpop:弹出最上面的key-value
rpop:弹出最下面的key-value
lindex:按照索引下标获取元素
llen:常看长度
127.0.0.1:6379> LPOP k1
"5"
127.0.0.1:6379> RPOP k1
"1"
127.0.0.1:6379> LRANGE k1 0 -1
1) "4"
2) "3"
3) "2"
127.0.0.1:6379> lindex k1 0
"4"
127.0.0.1:6379> LRANGE k1 0 -1
1) "4"
2) "3"
3) "2"
127.0.0.1:6379> llen k1
(integer) 3
lrem key:删除n个value
127.0.0.1:6379> LRANGE k1 0 -1
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> lrem k1 3 3
(integer) 1
127.0.0.1:6379> LRANGE k1 0 -1
1) "2"
2) "1"
ltrim key 开始index 结束index :截取指定范围的值后再给当前key赋值
127.0.0.1:6379> LRANGE k1 0 -1
1) "2"
2) "1"
3) "2"
4) "1"
127.0.0.1:6379> ltrim k1 0 1 #将0-1的值从新赋值给这个key
OK
127.0.0.1:6379> LRANGE k1 0 -1
1) "2"
2) "1"
rpoplpush 源列表 目的列表:把元列表的最后的值放在目的列表的最上面
127.0.0.1:6379> LRANGE k1 0 -1 #k1集合
1) "2"
2) "1"
127.0.0.1:6379> RPOPLPUSH k1 k2 #将k1的第一个值给了k2
"1"
127.0.0.1:6379> LRANGE k2 0 -1 #查看k2的值
1) "1"
2) "1"
3) "2"
127.0.0.1:6379> LRANGE k1 0 -1 #查看k1的值
1) "2"
lset key index value : 替换key当前下标的值
127.0.0.1:6379> LRANGE k1 0 -1
1) "2"
127.0.0.1:6379> lset k1 0 555555555
OK
127.0.0.1:6379> LRANGE k1 0 -1
1) "555555555"
linsert key beforre/after 值1 值2 :在具体值得前面或者后面添加value值,不成功返回-1
127.0.0.1:6379> LRANGE k1 0 -1
1) "555555555"
127.0.0.1:6379> LINSERT k1 before 555555555 111 #在具体值前添加
(integer) 2
127.0.0.1:6379> LINSERT k1 after 555555555 111 #在具体值后添加
(integer) 3
127.0.0.1:6379> LINSERT k1 before 5555 111 #添加失败
(integer) -1
127.0.0.1:6379> LRANGE k1 0 -1
1) "111"
2) "555555555"
3) "111"
hash (一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。)
hset:添加
hget:查找
hdel:删除
127.0.0.1:6379> hset baby id 1
(integer) 1
127.0.0.1:6379> hget baby id
"1"
127.0.0.1:6379> del baby id
(integer) 1
hmset :批量添加 一个key的多个属性
hmget:批量查找key的多个属性值
hkeys:查看所有的key
hvals:常看所有的values
hgetall:批量查看所有的key-value
127.0.0.1:6379> hmset baby id 1 name zhangsan age 11
OK
127.0.0.1:6379> hmget baby id name
1) "1"
2) "zhangsan"
127.0.0.1:6379> hkeys baby
1) "id"
2) "name"
3) "age"
127.0.0.1:6379> hvals baby
1) "1"
2) "zhangsan"
3) "11"
127.0.0.1:6379> hgetall baby
1) "id"
2) "1"
3) "name"
4) "zhangsan"
5) "age"
6) "11"
hlen:查看有几个属性
hexists key: 查看是否存在某个属性值,有返回1,没有返回0
hincrby:往某个key的value的后面累加数字 只用于数字 ,其他会报错
hsetnx:不存在就赋值 存在就返回0 添加失败
127.0.0.1:6379> hlen baby
(integer) 3
127.0.0.1:6379> HEXISTS baby id
(integer) 1
127.0.0.1:6379> HEXISTS baby id1
(integer) 0
127.0.0.1:6379> HINCRBY baby id 1111
(integer) 1112
127.0.0.1:6379> HINCRBY baby name 1111
(error) ERR hash value is not an integer
127.0.0.1:6379> hsetnx baby id 1
(integer) 0
127.0.0.1:6379> hsetnx baby id1 1
(integer) 1
set(String 类型的无序不可重复集合。通过哈希表实现的)
sadd :添加
smembers:查看
sismember:查看key里面纯在某个元素
scard:获取集合里的元素个数
srandmember key n: 随机出n个数
srem key value : 删除集合中的元素
127.0.0.1:6379> sadd score 1 2 3 4 #添加
(integer) 6
127.0.0.1:6379> smembers score #查看
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> scard score #获取集合里的元素个数
(integer) 4
127.0.0.1:6379> sismember score 2 #查看key里面纯在某个元素
(integer) 1
127.0.0.1:6379> srandmember score 3 #随机出n个数
1) "1"
2) "2"
3) "4"
127.0.0.1:6379> srem score 3 4 #删除集合中的元素
(integer) 2
127.0.0.1:6379> smembers score
1) "1"
2) "2"
spop key n: 随机出栈 n个
127.0.0.1:6379> spop b2 3
1) "1"
2) "2"
3) "4"
smove key1 key2 member:将key1中的member移动到key2
127.0.0.1:6379> SMOVE b1 b2 3
(integer) 1
127.0.0.1:6379> SMEMBERS b2
1) "1"
2) "3"
sdiff:差集
sinter:交集
sunion:并集
127.0.0.1:6379> sadd b1 1 2 3
(integer) 3
127.0.0.1:6379> sadd b2 1 2 4
(integer) 3
127.0.0.1:6379> sdiff b1 b2 #差集
1) "3"
127.0.0.1:6379> sinter b1 b2 #交集
1) "1"
2) "2"
127.0.0.1:6379> sunion b1 b2 #并集
1) "1"
2) "2"
3) "3"
4) "4"
zset(有序的不可重复列表。每个元素关联一个可重复分数score。通过score进行排序。)
zrange:通过索引区间返回有序集合成指定区间内的成员
zrangebyscore:通过分数返回有序集合指定区间内的成员
zcard:获取有序集合的成员数
zcount:计算在有序集合中指定区间分数的成员数
127.0.0.1:6379> zadd zset 1 q 2 w 3 e #向zset添加数据
(integer) 3
127.0.0.1:6379> zrange zset 0 -1 #查询zset全部的数据
1) "q"
2) "w"
3) "e"
127.0.0.1:6379> zrangebyscore zset 1 2 #根据分数范围查找数据
1) "q"
2) "w"
127.0.0.1:6379> zcard zset #获取zset的成员数
(integer) 3
127.0.0.1:6379> zcount zset 1 2 #根据分数范围获取值的个数
(integer) 2
zrem:移除有序集合中的一个或多个成员
zrevrange :在score范围内按照score从大到小返回数据
127.0.0.1:6379> zrevrange zset 1 2 withscores
1) "w"
2) "2"
3) "4"
4) "1.3"
zrevrangebyscore:移除有序集合中给定的分数区间的所有成员
ZRANK key :返回有序集合中指定成员的索引
127.0.0.1:6379> zrank zset w #返回w在集合中的索引
(integer) 4
ZSCORE key member:返回有序集中成员的分数值
127.0.0.1:6379> zscore zset 4
"1.3"
关于更多的命令指示我们从这个网上去查看http://redisdoc.com/
下一节我们讲一下Redis的持久化之RDB
关注公众号 果咩z 继续学习redis和其他知识
Redis第二讲【Redis基本命令和五大数据结构】的更多相关文章
- Redis第二篇(Redis基本命令)
-x 从标准输入读取一个参数 such as: echo –en “shaw” |./redis-cli –x setname == set name shaw -r 重复执行一个命令 ...
- redis 五大数据结构__常用命令
linux 下下载redis数据库 apt install redis 如果提示权限不够的话, 直接提权: sudo apt install redis-server linux启用.停止服务 ser ...
- Redis五大数据结构
1.Redis介绍 Redis是REmote DIctionary Server的缩写,作者定位于一个内存KV存储数据库(In-memory key-value Store),让Redis自豪的并不是 ...
- redis第一讲【redis的描述,linux和docker下的安装使用】
Redis(REmote DIctionary Server):是什么 redis(远程字典服务器),是完全开源免费的,高性能的k/v分布式内存数据,热门的Nosql数据库 Redis可以干什么: 内 ...
- 第1讲 Redis部署与基本操作
目录 一.简介 二.安装 1.默认安装位置 2.指定安装位置 3.安装的可执行文件的作用 三.启动与关闭 四.配置文件 五.Redis的数据类型 1. 共计5种类型 2. String(子串类型) 3 ...
- 说一下redis中5种数据类型的底层数据结构
前言: 阅读 redis设计与实现 一书的记录.未完待续... redis我们都知道有5种数据类型,分别是string,list,hash,set,zset,那么你知道它们的底层数据结构实现吗? ...
- redis教程(一)-----redis数据类型、基本命令、发布订阅以及持久化
简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMwa ...
- 第2讲 Redis常用命令与高级应用
目录 一.redis数据类型 5. sorted sets类型和操作 二.Redis常用命令 1.键值相关命令 2.服务器相关命令 三. redis高级应用 1. 给redis服务器设置密码 2.持久 ...
- Linux安装redis PHP安装Redis扩展 and基本命令
一.安装redis 用超级管理员身份运行: $ mkdir /usr/local/redis #redis安装目录 $ cd /usr/local/src #安装包下载目录 $ wget http:/ ...
随机推荐
- MySQL InnoDB 实现高并发原理
MySQL 原理篇 MySQL 索引机制 MySQL 体系结构及存储引擎 MySQL 语句执行过程详解 MySQL 执行计划详解 MySQL InnoDB 缓冲池 MySQL InnoDB 事务 My ...
- Arduino驱动ILI9341彩屏(一)——颜色问题
最近在淘宝的店铺上淘到了一块ILI9341的彩色液晶屏,打算研究一下如何使用. 淘宝店铺购买屏幕之后有附源代码可供下载,代码质量惨不忍睹,各种缩进不规范就不说了,先拿来试一下吧. 这是淘宝店铺代码的核 ...
- 剑指Offer-23.二叉搜索树的后序遍历序列(C++/Java)
题目: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 分析: 二叉树的后序遍历也就是先访问左子树,再访问右 ...
- 将Swagger2文档导出为HTML或markdown等格式离线阅读
网上有很多<使用swagger2构建API文档>的文章,该文档是一个在线文档,需要使用HTTP访问.但是在我们日常使用swagger接口文档的时候,有的时候需要接口文档离线访问,如将文档导 ...
- mysql--时区表问题(Windows环境下)
自己用Django开发个人博客是,数据库用的是mysql,期间遇到一个时间不一致的问题,具体解决过程: 1.问题原因:Windows没有时区表 2.去mysql官网下载相应版本的时区表:https:/ ...
- Ubuntu中使用Nginx+rtmp模块搭建流媒体视频点播服务
1. 背景 不知不觉笔者来到流媒体部门已经一年半多了,积攒了不少的流媒体知识,但平时工作也比较忙,很少进行总结性的梳理,最近准备花几个周末时间写一个流媒体系列的实践文章,也算是给自己做总结的同时帮助有 ...
- docker实例之mysql的使用
docker实例之mysql的使用 常用步骤 命令 1:搜索镜像 docker search xxx 2:拉取镜像 docker pull xxx:yy 3:查看镜像 docker image ins ...
- Java 9 ← 2017,2019 Java → 13 ,都发生了什么?
距离 2019 年结束,只剩下 35 天了.你做好准备迎接 2020 年了吗? 一到年底,人就特别容易陷入回忆和比较之中,比如说这几天, 的对比挑战就火了! 这个话题登上了微博的热搜榜,也刷爆了朋友圈 ...
- Linux LVM 配置
本文出自 “www.kisspuppet.com” 博客,请务必保留此出处http://dreamfire.blog.51cto.com/418026/1084729 许多Linux使用者安装操作系统 ...
- Java架构师必知:什么是单点登录,主要会应用于哪些场景?
单点登录在大型网站里使用得非常频繁,例如,阿里旗下有淘宝.天猫.支付宝,阿里巴巴,阿里妈妈,阿里妹妹等网站,还有背后的成百上千的子系统,用户一次操作或交易可能涉及到几十个子系统的协作,如果每个子系统都 ...