Redis简洁入门
Redis简洁入门?关于 Redis本身的一些语法、命令的使用。
简介?Redis是一款基于键值对的 NoSQL数据库,它的值支持多种数据结构,比如,字符串,哈希,列表,集合,有序集合(sorted sets)等。
Redis将所有的数据都存放在内存中,所以它的读写性能方面堪称秀儿。同时,它还可以将内存中的数据以快照或日志的形式保存在硬盘上,以保证数据的安全性。
Redis典型的应用场景包括:缓存、排行榜、计数器、社交网络、消息队列等等。
「传送门:」https://redis.io/
官网
Windows版本下载
安装使用(Windows版本演示)下载 msi文件,点击安装,一路 next即可。上一步完事之后将其添加到环境变量。上一步完事之后打开黑窗口。输入 redis-cli回车。如出现下图信息,表示安装成功并且服务以及启动。
简单使用换库?默认内置了16个库(0-15)
切库命令:select [索引]
命令
select 1
刷新?如果不需要之前的操作数据,执行 flushdb可以将其刷掉。
命令
flushdb
字符串存?以键值对的形式存储字符串形式的数据,如果需要存储以`-`连接的字符串,用冒号【:】分隔。
示例:存储键为text-count,值为1的字符串。
set test:count 1
取?获取存储的字符串数据也很简单,一条 get命令即可。
示例:取到 key为 test:count的 value。
get test:count
返回:
"1"
改?redis支持对存储的字符串数据进行一些基本的修改操作。
示例:将如上字符串「加一、减一」。
#加一
incr test:count
#返回
2
#---------------------
#减一
decr test:count
#返回
1
哈希存?存储哈希的命令:hset
由于哈希值本身也是kv的形式,所以需要两次进行key_value的输入。
示例:存于一个id为1,用户名为 Tisox的用户数据,名为【test-user】。
# 存入用户id
hset test:user id 1
#提示:表示操作成功的提示
(integer) 1
#存入用户名
hset test:username Tisox
#提示
(integer) 1
#------------------------------
取?和字符串存取类似,哈希的取值命令为 hget
示例:对上述存入的test-user信息进行读取。
#取id
hget test:user id
#返回
"1"
#-----------------------------------
#取用户名
hget test:user username
# 返回
"Tisox"
列表?redis里的列表比较特殊,它存储数据的方式可以从左右两边进行,可以视为一个横向的容器。
容器的左右两边都可以进行存取操作。并且列表是有序可重复的。
存?从左边存入:101 102 103
# 从左边存入101 102 103
lpush test:ids 101 102 103
# 提示
(integer) 3
# 查看其长度
llen test:ids
# 返回
(integer) 3
查?列表支持不同的方式进行查看
# 按索引查看
lindex test:ids 0
# 返回
"103"
lindex test:ids 2
# 返回
"101"
# 按范围查看
lrange test:ids 0 2
# 返回
1) "103"
2) "102"
3) "101"
取?由于列表的特性,其取值也可以看作是队列或者栈的出队、出栈等操作。
# 从右侧弹出一个值
lpop test:ids
#返回
"101"
lpop test:ids
#返回
"102"
集合?集合(sets),无序且不重复。
存?往集合中存入一个key为test-language ,值为 Java,C++,Python的数据。
# 存入
add test:language Java C++ Python
# 提示
(integer) 3
# -----------------------------------
# 统计集合中有多少个元素
scard test:language
# 返回 5
#------------------------------------
# 从集合中随机弹出一个元素:应用场景:【抽奖业务】
spop test:language
# 返回
"Java"
spop test:language
# 返回
"Python"
查?查看集合中的元素
# 查看当前集合中的剩余元素
smembers test:language
# 返回
"C++" # 因为上面已经随机弹出了另外两个数据,所以就剩下了"Python"
有序集合(sorted sets)?给每一个存入的值附加一个分数,按照该分数进行排序的集合。
存?添加学生数据
# 添加学生以及其分数
zadd test:students 10 aaa 20 bbb 30 ccc 40 ddd 50 eee
# 提示
(integer) 5
# 统计集合元素个数
zcard test:students
# 返回
(integer) 5
# 查询某个值的分数
zscore test :students ccc
# 返回
"30"
# 返回目的按照分数排行(0、1、2、3、4.....)
zrank test:students ccc
# 返回
2
# 按照排序,取0-2大小的值
zrange test:students 0 2
# 返回
1) "aaa"
2) "bbb"
3) "ccc"
全局命令?字面意思,这些命令针对全局生效。
# keys *
keys *
# 返回
1) "test:user"
2) "test:language"
3) "text:count"
4) "test:ids"
5) "test:students"
# ----------------------------------
# keys test*
keys test*
# 返回
1) "test:user"
2) "test:language"
3) "text:count"
4) "test:ids"
5) "test:students"
# ------------------------------------
# 查看类型
type test:user
# 返回
hash
# 查看某个key是否存在
exists test:user
# 返回
1 #表示存在
# 输出key
del test:user
# ---------------------------------------
# 设置有效期:秒为单位,过期自动删除
expire test:students 10
管理 Redis前面所有的命令都是基于key的基础上进行的,那么又怎样取管理和操作这些key呢?
以下是一些用来管理 key的常用命令:这里只作一个列举,不会全部进行演示。
# 选择库
select index
index为redis库的索引,共有0-15个索引16个库,默认启用第一个库,索引为0。
# 查看全部的key
keys *
# 通过通配符进行匹配查看
# 查看所有key中以my开头的key
keys my*
注意,如果数据量很大的情况下,一般不建议直接使用 keys*进行查看,该操作的时间复杂度是O(N),的,数据量太大可能会导致阻塞崩溃。
# 查看当前库中有多少key
dbsize
# 清理库中的key
flushdb
这是一个危险且强大的命令,如果使用不当,可能造成将所有的key全部删除,是不可逆的操作,在使用时应该三思。
# 查看key的数据类型
type key
# 判断某个key是否存在
exists key
# 随机返回一个key
randomkey
# 给key重命名
rename key newkey
建议在使用时结合 nx参数使用。
# 删除一个或者多个key
del key1 key2 .....
# 或者
unlink key1 key2 ....
del带阻塞,unlink则没有。
# 渐进式遍历key
# 基础用法,跟一个整数作为游标,表示从何处开始遍历
scan 0
# 进阶用法
scan 0 match counter* count 10
counter*表示匹配的规则,所有以该字符开头的key,
count后的数值表示每轮遍历的数量。
为了方便演示 scan的用法,我们需要有一定数量的key。可以使用 redis自带的压力测试工具来生成这些测试数据。
这个工具存在于 /usr/bin/redisbenmark。
# redisbenchmark的使用命令
redis-benchmark -c 5 -n 100 -r 1000 -a reids密码
上面的命令中:
5表示启动的客户端数量
100表示请求数量
1000表示插入的数据量
密码表示你登录redis客户端的密码
相关文章
-
阅读本文大约需要16分钟。 大家好,这里是Java后端。 这篇文章我想和你聊一聊Redis的最佳实践。 你的项目或许已经使用Redis很长时间了,但在使用过程中,你可能还会或多或少地遇到以下问题: 我的Redis内存为什么增长这么快?为什么我的Redis操作延迟变大了?如何降低Redis故障发生的频率?日常运维Redi
-
一什么是NoSQL? Nosql=notonlysql(不仅仅是SQL) 关系型数据库:列+行,同一个表下数据的结构是一样的。 非关系型数据库:数据存储没有固定的格式,并且可以进行横向扩展。 NoSQL泛指非关系型数据库,随着web2.0互联网的诞生,传统的关系型数据库很难对付web2.0大数据时代!尤其是超大规模的
-
作者|初一 责编|胡巍巍 不管你是从事Python、Java、Go、PHP、Ruby等等......Redis都应该是一个比较熟悉的中间件。而大部分经常写业务代码的程序员,实际工作中或许只用到了setvalue、GetValue两个操作,而对Redis缺乏一个整体的认识。今天就来对Redis的常见问题做一个总结。希望
-
来源:高广超 www.jianshu.com/p/2a4a57c5e313 概述 Redis与其他key–value缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。 Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,
-
作者:MagicKaito 本文已收录至我的GitHub 【对线面试官】系列一周两篇持续更新中! Redis前文回顾从零单排学Redis【青铜】 从零单排学Redis【白银】 从零单排学Redis【黄金】 从零单排学Redis【铂金一】 从零单排学Redis【铂金二】 面试前必须要知道的Redis面试题 Redis作为
-
JavaGuide开源版的兄弟《Java面试指北》已经出生。个人能力和精力有限,希望有更多同好参与到JavaGuide开源版本的维护中 你好,我是Guide。今天来推荐一款我平常一直在使用的Redis可视化管理工具,真的非常不错,好用!我会通过和另外一款类似的工具QuickRedis作对比的方式来介绍。 QuickRe
-
作者|周明尧 来源|Java旅途(ID:Javatrip)头图|CSDN下载自东方ICRedis是一种基于键值对的NoSQL数据库,它的值主要由string(字符串),hash(哈希),list(列表),set(集合),zset(有序集合)五种基本数据结构构成,除此之外还支持一些其他的数据结构和算法。key都是由字符
-
最近逛了一下Redis官方网站,发现Redis不仅推出了很多新特性,而且还发布了一款可视化工具RedisInsight。试用了一下感觉非常不错,最关键的是能支持RedisJSON之类的新特性,这是第三方工具无法比拟的。今天带大家体验一下RedisInsight,确实非常好用! RedisInsight简介RedisIn
-
如果你做后端,面试八成会被问到Redis,尤其在一些大厂面试里更常见,而且他们不仅要求面试者能简单使用Redis,还要深入理解其底层实现原理,具备解决常见问题的能力。不夸张地说,后端开发的必备技能之一就是做到熟练使用Redis。 但我发现,在工作或面试时,大家还是存在不少各种关于理论、实战或源码方面的问题,比如:如何用
-
作者:贲绍华 爱可生研发中心工程师,负责项目的需求与维护工作。其他身份:柯基铲屎官。 本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 一、集群架构的一些基本概念当我们只使用一台Redis实例也就是Single架构时,需要考虑一些非常实际的问题,如:单节点一但宕机则业务停