Redis 02: redis基础知识 + 5种数据结构 + 基础操作命令
Redis基础知识
1)、测试redis服务的性能:
redis-benchmark
2)、查看redis服务是否正常运行:
ping 如果正常---pong
3)、查看redis服务器的统计信息:
info 查看redis服务的所有统计信息
info [信息段] 查看redis服务器的指定的统计信息,如:info Replication
4)、redis的数据库实例:作用类似于mysql的数据库实例,redis中的数据库实例只能由redis服务来创建和维护,开发人员不能修改和自行创建数据库实例;
默认情况下,redis会自动创建16个数据库实例,并且给这些数据库实例进行编号,从0开始,一直到15,使用时通过编号来使用数据库;
可以通过配置文件,指定redis自动创建的数据库个数;redis的每一个数据库实例本身占用的存储空间是很少的,所以也不造成存储空间的太多浪费。
默认情况下,redis客户端连接的是编号是0的数据库实例;可以使用select index切换数据库实例。
5)、查看当前数据库实例中所有key的数量:dbsize
6)、查看当前数据库实例中所有的key:keys *
7)、清空数据库实例:flushdb
8)、清空所有的数据库实例:flushall
9)、查看redis中所有的配置信息:config get *
查看redis中的指定的配置信息:config get parameter
Redis的五种数据结构
程序是用来处理数据的,Redis是用来存储数据的;程序处理完的数据要存储到redis中,不同特点的数据要存储在Redis中不同类型的数据结构中。
字符串: zhangsan 20 true string 单key:单value: username:zhangsan age:20
list列表: 13900009999 zs@163.com 321321 list 单key:多有序value: contacts:13900009999,xxx,xxxx
set集合: beijing shanghai chongqing tianjin set 单key:多无序value:city:bj sh cq tj
pojo: id:1001,name:zhangsan,age:20 hash 单key: 对象(属性:值):
student:id:1001,name:zhangsan,age:20
zset 单key:多有序vlaue:
city:
1000 tj,1200 cq,1500 sh,2000 bj
Redis中的操作命令
1)、redis中有关key的操作命令:
a)查看数据库中的key:keys pattern
|->*:匹配0个或者多个字符
|->?: 匹配1个字符
|->[]:匹配[]里边的1个字符
keys *:查看数据库中所有的key
keys k*:查看数据库中所有以k开头的key
keys h*o:查看数据库中所有以h开头、以o结尾的key
keys h?o: 查看数据库中所有以h开头、以o结尾的、并且中间只有一个字符的key
keys h[abc]llo:查看数据库中所有以h开头以llo结尾,并且h后边只能取abc中的一个字符的key
b)判断key在数据库中是否存在:exists key 如果存在,则返回1;如果不存在,则返回0
exists key [key key ....] 返回值是存在的key的数量
exists k1
exists k1 k2 k3 hello
c)移动指定key到指定的数据库实例:move key index
move k 1
d)查看指定key的剩余生存时间:ttl key
|->如果key没有设置生存时间,返回-1
|->如果key不存在,返回-2
ttl k1
ttl k2
e)设置key的最大生存时间:expire key seconds
expire k2 20
f)查看指定key的数据类型:type key
type k1
g)重命名key: rename key newkey
rename hello k2
h)删除指定的key:del key [key key .....]
|->返回值是实际删除的key的数量
del k1 k2 k3 k4
2)、redis中有关string类型数据的操作命令:
a)将string类型的数据设置到redis中:set 键 值
set zsname zhangsan
set zsage 20
set totalRows 100
set zsage 30 如果key已经存在,则后来的value会把以前的value覆盖掉.
b)从redis中获取string类型的数据:get 键
get zsname
get zsage
get totalRows
c)追加字符串:append key value
|->返回追加之后的字符串长度
|->如果key不存在,则新创建一个key,并且把value值设置为value。
set phone 1389999
append phone 8888
d)获取字符串数据的长度:strlen key
strlen phone
e)将字符串数值进行加1运算:incr key
|->返回加1运算之后的数据
|->如果key不存在,首先设置一个key,值初始化为0,然后进行incr运算。
|->要求key所表示value必须是数值,否则,报错
incr zsage
incr age
incr zsname 报错
f)将字符串数值进行减1运算:decr key
|->返回减1运算之后的数据
|->如果key不存在,首先设置一个key,值初始化为0,然后进行decr运算。
|->要求key所表示value必须是数值,否则,报错
g)将字符串数值进行加offset运算:incrby key offset
|->返回加offset运算之后的数据
|->如果key不存在,首先设置一个key,值初始化为0,然后进行incrby运算。
|->要求key所表示value必须是数值,否则,报错
incrby zsage 10
h)将字符串数值进行减offset运算:decrby key offset
|->返回减offset运算之后的数据
|->如果key不存在,首先设置一个key,值初始化为0,然后进行decrby运算。
|->要求key所表示value必须是数值,否则,报错
decrby zsage 10
i)闭区间获取字符串key中从startIndex到endIndex的字符组成的子字符串:
getrange key startIndex endIndex
|->下标自左至右,从0开始,依次往后,最后一个字符的下标是字符串长多-1;
|->字符串中每一个下标也可以是负数,负下标表示自右至左,从-1开始,依次往前,最右边一个字符的下标是-1
zhangsan
getrange zsname 2 5 angs
getrange zsname 2 -3 angs
getrange zsname 0 -1 zhangsan
j)用value覆盖从下标为startIndex开始的字符串,能覆盖几个字符就覆盖几个字符:setrange key startIndex value
setrange zsname 5 xiaosan //zhangxiaosan
setrange zsname 5 lao //zhanglaoosan
k)设置字符串数据的同时,设置它最大生命周期:setex key seconds value
setex k1 20 v1
l)设置string类型的数据value到redis数据库中,当key不存在时设置成功,否则,则放弃设置:setnx key value
setnx zsage 20
m)批量将string类型的数据设置到redis中:mset 键1 值1 键2 值2 .....
mset k1 v1 k2 v2 k3 v3 k4 v4 k5 v5
n)批量从redis中获取string类型的数据:mget 键1 键2 键3.....
mget k1 k2 k3 k4 k5 k6 zsname zs age totalRows
o)批量设置string类型的数据value到redis数据库中,当所有key都不存在时设置成功,否则(只要有一个已经存在),则全部放弃设置:msetnx 键1 值1 键2 值2 .....
msetnx kk1 vv1 kk2 vv2 kk3 vv3 k1 v1
3)、redis中有关list类型数据的操作命令:单key-多有序value,一个key对应多个value;
多个value之间有顺序,最左侧是表头,最右侧是表尾;
每一个元素都有下标,表头元素的下标是0,依次往后排序,最后一个元素下标是列表长度-1;
每一个元素的下标又可以用负数表示,负下标表示从表尾计算,最后一个元素下标用-1表示;
元素在列表中的顺序或者下标由放入的顺序来决定。
通过key和下标来操作数据。
a)将一个或者多个值依次插入到列表的表头(左侧):lpush key value [value value .....]
lpush list01 1 2 3 结果:3 2 1
lpush list01 4 5 结果:5 4 3 2 1
b)获取指定列表中指定下标区间的元素:lrange key startIndex endIndex
lrange list01 1 3 结果:4 3 2
lrange list01 1 -2 结果: 4 3 2
lrange list01 0 -1 结果:5 4 3 2 1
c)将一个或者多个值依次插入到列表的表尾(右侧):rpush key value [value value .....]
rpush list02 a b c 结果:a b c
rpush list02 d e 结果:a b c d e
lpush list02 m n 结果: n m a b c d e
d)从指定列表中移除并且返回表头元素:lpop key
lpop list02
e)从指定列表中移除并且返回表尾元素:rpop key
rpop list02
f)获取指定列表中指定下标的元素:lindex key index
lindex list01 2 结果:3
g)获取指定列表的长度:llen key
llen list01
h)根据count值移除指定列表中跟value相等的数据:lrem key count value
|->count>0:从列表的左侧移除count个跟value相等的数据;
|->count<0:从列表的右侧移除count个跟vlaue相等的数据;
|->count=0:从列表中移除所有跟value相等的数据
lpush list03 a a b c a d e a b b 结果:b b a e d a c b a a
lrem list03 2 a 结果:b b e d c b a a
lrem list03 -1 a 结果:b b e d c b a
lrem list03 0 a 结果:b b e d c b
i)截取指定列表中指定下标区间的元素组成新的列表,并且赋值给key:ltrim key startIndex endIndex
lpush list04 1 2 3 4 5 结果:5 4 3 2 1
ltrim list04 1 3
lrange list04 0 -1 结果:4 3 2
j)将指定列表中指定下标的元素设置为指定值: lset key index value
lset list04 1 10
l)将value插入到指定列表中位于pivot元素之前/之后的位置: linsert key before/after pivot vlaue
linsert list04 before 10 50
linsert list04 after 10 60
4)、redis中有关set类型数据的操作命令:单key-多无序value,一个key对应多个vlaue;
value之间没有顺序,并且不能重复;
通过业务数据直接操作集合:
a)将一个或者多个元素添加到指定的集合中:sadd key value [value value ....]
*如果元素已经存在,则会忽略。
*返回成功加入的元素的个数
sadd set01 a b c a 结果:a b c
sadd set01 b d e
b)获取指定集合中所有的元素:smembers key
smembers set01
c)判断指定元素在指定集合中是否存在:sismember key member
*存在,返回1
*不存在,返回0
sismember set01 f
sismember set01 a
d)获取指定集合的长度:scard key
scard set01
e)移除指定集合中一个或者多个元素:srem key member [member .....]
*不存在的元素会被忽略
*返回成功成功移除的个数
srem set01 b d m
f)随机获取指定集合中的一个或者多个元素:srandmember key [count]
|->count>0:随机获取的多个元素之间不能重复
|->count<0: 随机获取的多个元素之间可能重复
sadd set02 1 2 3 4 5 6 7 8
srandmember set02
srandmember set02 3
srandmember set02 -3
g)从指定集合中随机移除一个或者多个元素:spop key [count]
spop set02
h)将指定集合中的指定元素移动到另一个元素:smove source dest member
smove set01 set02 a
i)获取第一个集合中有、但是其它集合中都没有的元素组成的新集合:sdiff key key [key key ....]
sdiff set01 set02 set03
j)获取所有指定集合中都有的元素组成的新集合:sinter key key [key key ....]
sinter set01 set02 set03
k)获取所有指定集合中所有元素组成的大集合:sunion key key [key key .....]
sunion set01 set02 set03
5)、redis中有关hash类型数据的操作命令:单key:field-value
field-value
.....
studentzs:id-1001
name-zhangsan
age-20
a)将一个或者多个field-vlaue对设置到哈希表中:hset key filed1 value1 [field2 value2 ....]
*如果key field已经存在,把value会把以前的值覆盖掉
hset stu1001 id 1001
hset stu1001 name zhangsan age 20
b)获取指定哈希表中指定field的值:hget key field
hget stu1001 id
hget stu1001 name
c)批量将多个field-value对设置到哈希表中: hmset key filed1 value1 [field2 value2 ....]
hmset stu1002 id 1002 name lisi age 20
d)批量获取指定哈希表中的field的值:hmget key field1 [field2 field3 ....]
hmget stu1001 id name age
e)获取指定哈希表中所有的field和value:hgetall key
hgetall stu1002
f)从指定哈希表中删除一个或者多个field:hdel key field1 [field2 field3 ....]
hdel stu1002 name age
g)获取指定哈希表中所有的filed个数:hlen key
hlen stu1001
hlen stu1002
h)判断指定哈希表中是否存在某一个field:hexists key field
hexists stu1001 name
hexists stu1002 name
i)获取指定哈希表中所有的field列表:hkeys key
hkeys stu1001
hkeys stu1002
j)获取指定哈希表中所有的value列表:hvals key
hvals stu1001
hvals stu1002
k)对指定哈希表中指定field值进行整数加法运算:hincrby key field int
hincrby stu1001 age 5
l)对指定哈希表中指定field值进行浮点数加法运算:hincrbyfloat key field float
hset stu1001 score 80.5
hincrbyfloat stu1001 score 5.5
m)将一个field-vlaue对设置到哈希表中,当key-field已经存在时,则放弃设置;否则,设置file-value:hsetnx key field value
hsetnx stu1001 age 30
6)、redis中有关zset类型数据的操作命令:有序集合
本质上是集合,所有元素不能重复;
每一个元素都关联一个分数,redis会根据分数对元素进行自动排序;
分数可以重复;
既然有序集合中每一个元素都有顺序,那么也都有下标;
有序集合中元素的排序规则又列表中元素的排序规则不一样。
a)将一个或者多个member及其score值加入有序集合:zadd key score member [score member ....]
*如果元素已经存在,则把分数覆盖
zadd zset01 20 z1 30 z2 50 z3 40 z4
zadd zset01 60 z2
b)获取指定有序集合中指定下标区间的元素:zrange key startIndex endIndex [withscores]
zrange zset01 0 -1
zrange zset01 0 -1 withscores
c)获取指定有序集合中指定分数区间(闭区间)的元素:zrangebyscore key min max [withscores]
zrangebyscore zset01 30 50 withscores
d)删除指定有序集合中一个或者多个元素:zrem key member [member......]
zrem zset01 z3 z4
e)获取指定有序集合中所有元素的个数:zcard key
zcard zset01
f)获取指定有序集合中分数在指定区间内的元素的个数:zcount key min max
zcount zset01 20 50
g)获取指定有序集合中指定元素的排名(排名从0开始): zrank key member
zrank zset01 z4 ===>2
h)获取指定有序集合中指定元素的分数:zscore key member
zscore zset01 z4
i)获取指定有序集合中指定元素的排名(按照分数从大到小的排名):zrevrank key member
zrevrank zset01 z4 ===>1
Redis 02: redis基础知识 + 5种数据结构 + 基础操作命令的更多相关文章
- JavaSE 基础知识(常识概念 + 基础语法)问答总结/面试题 —— 讲给应届生的 Java 开源知识项目
写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...
- Redis学习笔记之入门基础知识——五种数据类型
1) 字符串 SET设置值,GET获取值,DEL删除值 INCR key-name将键存储的值加上1 DECR key-name将键存储的值减去1 INCRBY key-name amou ...
- redis学习(三)五种数据结构
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). 1.string string类型是Redis最基 ...
- C++ 基础知识回顾(string基础、智能指针、迭代器、容器类)
[1] string基础 [1.1] string 的构造 #include <iostream> #include <string> int main() { using n ...
- C# 篇基础知识4——.NET的基础概念
C#语言是与微软的.NET框架紧密地联系在一起的,而.NET框架是微软.NET战略的核心,为了更好的理解C#语言,我们必须了解一些.NET框架的基本知识..NET框架是为开发应用程序推出的一个编程平台 ...
- java基础知识——程序员面试基础
一.面向对象的特征有哪些? 答:①.抽象:抽象是忽略一个主题中与当前目标无关的那些方面,一边更充分的注意与当前目标有关的方面.抽象并不打算了解全面问题,而是选择其中的一部分,暂时不用部分细节.抽象包括 ...
- 【基础知识】Asp.Net基础三
服务器端控件一般用于访问量不高的网站,要做到物尽其用. 服务器端控件: FIleUpload控件:向服务器上传文件 if (this.FileUpload1.HasFile) { // Path.Ge ...
- 【基础知识】ASP.NET[基础一(ashx)]
一.ASP.NET介绍 1.ASP.NET包括: 一般处理程序(ashx):WebForm ( aspx ):MVC(Model view con~~): 2.ASP.NET的常用文件(重点): 1& ...
- Python基础知识之5——函数基础
函数 函数是一个独立且封闭完成特定功能的代码块,可以在任何地方被调用.Python内置了很多函数,我们可以直接调用,使用的时候,先查询下Python的官方文档即可: http://docs.pytho ...
随机推荐
- 深入Synchronized各种使用方法
深入学习Synchronized各种使用方法 在Java当中synchronized通常是用来标记一个方法或者代码块.在Java当中被synchronized标记的代码或者方法在同一个时刻只能够有一个 ...
- BZOJ4569 [Scoi2016]萌萌哒(并查集,倍增)
类似\(ST表\)的思想,倍增\(log(n)\)地合并 你是我家的吗?不是就来呀啦啦啦.还有要来的吗?没了!那有多少个家就映射多少答案呀 倍增原来这么好玩 #include <iostream ...
- Luogu5020 货币系统 (完全背包)
bool型完全背包 #include <iostream> #include <cstdio> #include <cstring> #include <al ...
- Spark基础入门(01)—RDD
1,基本概念 RDD(Resilient Distributed Dataset) :弹性分布式数据集 它是Spark中最基本的数据抽象,是编写Spark程序的基础.简单的来讲,一个Spark程序可以 ...
- 创建deploymen的几种方式
创建deployment方式有两种,一种是命令直接创建,一种是使用yaml文件 1. 直接使用命令方式: --record 参数用来记录版本,也可以忽略,建议带上 kubectl create dep ...
- 第四十八篇:webpack的基本使用(二) --安装和配置webpack-dev-server插件
好家伙, 1.webpack中的默认约定 默认的打包入口文件为src -->index.js 默认的输出文件路径为dist -->main.js 既然有默认,那么就说明肯定能改 2.en ...
- 记录一下~~~Linux配置定时任务备份数据库dmp文件
1.创建备份目录: mkdir -p /dcits/sx_xmz/sx_data_bak chown -R oracle18c:oinstall /dcits/sx_xmz/sx_data_bak 2 ...
- 这里聊聊扫地机的 IOT 开发
以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」https://www.cnblogs.com/englyf/p/16663833.html 消费者使用扫地机通常的方式是通过 ...
- python3实现:进程遇Error定时重启
import os import time # 停止HFish def stopHFish(): # while True: try: # 找到HFish进程号 HFish_id = int(os.p ...
- Python实验报告——第4章 序列的应用
实验报告 [实验目的] 1.掌握python中序列及序列的常用操作. 2.根据实际需要选择使用合适的序列类型. [实验条件] 1.PC机或者远程编程环境. [实验内容] 1.完成第四章 序列的应用 实 ...