Redis入门(上):Redis概念和常用命令

开始时间:2022-03-11
课程链接:Redis

Redis概念

Remote Dictionary Server(远程字典服务器),是一个用C语言编写的、开源的、基于内存运行并支持持久化的、高性能的NoSQL数据库.也是当前热门的NoSQL数据库之一。
与传统数据库不同的是 Redis 的数据是存在内存中的 ,也就是它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。
Redis数据大部分时间都是存储内存中的,适合存储频繁访问、数据量比较小的数据。
使用缓存主要是为了提升用户体验以及应对更多的用户。

NoSQL

NoSQL = Not Only SQL(不仅仅是SQL) ,泛指non-relational(非关系型数据库)。

· 单机数据库时代、 一个应用对应一个数据库实例(MySQL)
· Memcached时代、缓存时代(水平时代) 到缓存里取,访问效率提高(解决不了数据量大的问题)
· 读写分离时代、
· 分表分库时代(集群)、(一个表都分成多个库)
上面都是关系型数据库
· nosql时代

关系型数据库:oracle、mysql、DB2、sqlserver、…

非关系型数据库(NoSql): 彻底改变底层存储机制。不再采用关系数据模型,而是采用聚合数据结构存储数据。
redis、mongoDB、HBase、…
NoSQL数据库是为了解决大规模数据集合多重数据种类带来的挑战,特别是超大规模数据的存储。

关系型数据库:表
非关系型数据库:聚合模型—把一组相关联的数据作为一个整体进行存储和管理。
BSON:数据保存到键值对中、数据和数据之间用逗号隔开,{}表示对象,[]表示数组。

Redis的特点

  • 1、支持数据持久化
    Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
  • 2、支持多种数据结构
    Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • 3、支持数据备份
    Redis支持数据的备份,即master-slave模式的数据备份。

在Linux上装Redis

使用Xftp工具上传redis-5.0.2.tar.gz到linux 系统
解压redis-5.0.2.tar.gz到/opt目录

[root@localhost mysoftwares]# tar -zxcf redis-5.0.2.tar.gz -C /opt

安装gcc。

什么是 gcc ?
gcc是GNU compiler collection的缩写,它是Linux下一个编译器集合(相当于javac ),是c或c++程序的编译器。
在有外网的情况下,使用yum进行安装。执行命令:yum -y install gcc。

执行make指令进行编译

[root@localhost redis-5.0.2]# make

执行make install安装redis

在make执行之后再执行 make install,该操作则将 src下的许多可执行文件复制到/usr/local/bin 目录下,这样做可以在任意目录执行redis的软件的命令(例如启动,停止,客户端连接服务器等), make install 可以不用执行

[root@localhost redis-5.0.2]# make install

启动

后台启动 redis-server &

[root@localhost redis-5.0.2]# cd /
[root@localhost /]# ls
1    boot  etc   lib    media  opt   root  sbin  sys  usr
bin  dev   home  lib64  mnt    proc  run   srv   tmp  var
[root@localhost /]# cd /usr
[root@localhost usr]# cd local
[root@localhost local]# cd bin
[root@localhost bin]# ls
redis-benchmark  redis-check-rdb  redis-sentinel
redis-check-aof  redis-cli        redis-server
[root@localhost bin]# redis-server &

在这里插入图片描述

关闭服务

通过kill命令:
ps -ef|grep redis查看pid
kill -9 pid

通过redis-cli命令关闭:

redis-cli shutdown

redis的客户端

用来连接redis服务,向redis服务端发送命令,并且显示redis服务处理结果。
redis-cli:是redis自带客户端,使用命令redis-cli就可以启动redis的客户端程序。

./mysql -uroot -p

redis-cli:默认连接127.0.0.1(本机)的6379端口上的redis服务。
redis-cli -p 端口号:连接127.0.0.1(本机)的指定端口上的redis服务。
redis-cli -h ip地址 -p 端口:连接指定ip主机上的指定端口的redis服务。

链接的时候报错

Could not connect to Redis at 127.0.0.1:6379: Connection refused

首先我们需要
找到redis.conf 并修改 daemonize no为 daemonize yes ,这样就可以默认启动就后台运行

[root@localhost redis-5.0.2]# vim  redis.conf

然后开启客户端要确保服务端启动

[root@localhost /]# redis-server /opt/redis-5.0.2/redis.conf

或者

[root@localhost redis-5.0.2]# redis-server &

此时才能使用上面的指令
直接连接redis (默认ip127.0.0.1,端口6379):redis-cli

[root@localhost redis-5.0.2]# redis-cli

指定IP和端口连接redis:redis-cli –h 127.0.0.1 -p 6379
-h redis主机IP(可以指定任意的redis服务器)
-p端口号(不同的端口表示不同的redis应用)

exit和quit 实现退出

测试redis性能

[root@localhost redis-5.0.2]# redis-benchmark

87183.96 requests per second

看一下连接是否正常

[root@localhost redis-5.0.2]# redis-cli
127.0.0.1:6379> ping
PONG

输入ping,redis给我们返回PONG,表示redis服务运行正常

查看redis服务器的统计信息:info

语法:info [section]
作用:以一种易于解释且易于阅读的格式,返回关于 Redis 服务器的各种信息和统计数值。section 用来返回指定部分的统计信息。 section的值:server , clients ,memory等等。不加section 返回全部统计信息
返回值:指定section的统计信息或全部信息

redis的数据库实例

作用类似于mysql的数据库实例,redis中的数据库实例只能由redis服务来创建和维护,开发人员不能修改和自行创建数据库实例
默认情况下,redis会自动创建16个数据库实例,并且给这些数据库实例进行编号,从0开始,一直到15,使用时通过编号来使用数据库;
可以通过配置文件,指定redis自动创建的数据库个数;
redis的每一个数据库实例本身占用的存储空间是很少的,所以也不造成存储空间的太多浪费。

默认情况下,redis客户端连接的是编号是0的数据库实例;可以使用select index切换数据库实例。

Redis的库和关系型数据库中的数据库实例类似,但又有一些不同,比如redis中各个库不能自定义命名,只能用序号表示,redis中各个库不是完全独立的,使用时最好一个应用使用一个redis实例,不建议一个redis实例中保存多个应用的数据。

切换库实例

127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> 

查看当前数据库中key的数目

127.0.0.1:6379> dbsize
(integer) 5

0号库默认有4个数据

  • 查看当前数据库中有哪些key:keys *
127.0.0.1:6379> keys *
1) "mylist"
2) "k1"
3) "key:__rand_int__"
4) "counter:__rand_int__"
5) "myset:__rand_int__"

  • 清空当前库:flushdb
  • 清空所有数据库:flushall
  • config get * 获得redis的所有配置值
  • 语法:config get parameter
    作用:获取运行中Redis服务器的配置参数, 获取全部配置可以使用*。参数信息来自redis.conf 文件的内容。
    获取数据库个数 config get databases
    获取端口号config get port

Redis数据结构

A、 字符串类型 string
字符串类型是Redis中最基本的数据结构,它能存储任何类型的数据,包括二进制数
据,序列化后的数据,JSON化的对象甚至是一张图片。最大512M。
对应就是Java的Map
在这里插入图片描述
点赞收集可用这个
B、 列表类型 list
Redis列表是简单的字符串列表,按照插入顺序排序,元素可以重复。你可以添加一个元素到列表的头部(左边)或者尾部(右边),底层是个链表结构。
Map<String,List>

在这里插入图片描述
微信文章订阅公众号
lpush likeArticle:JDH 11 22
其中11和22是文章编号,这样给他推进去
C、 集合类型 set
Redis的Set是string类型的无序无重复集合。
在这里插入图片描述
可以方便的进行差集交集并集的运算
应用场景

  • 微信抽奖
    SRANDMEMBER set1 1 抽一个一等奖
    SRANDMEMBER set1 3 抽三个二等奖
    SPOP set1 2
    抽两个一等奖并删除掉这两个元素【抽过奖的不给再抽】
  • 社交点赞
    在这里插入图片描述
  • 共同好友
    取交集
    在这里插入图片描述

D、 哈希类型 hash
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
对应Java Map<key1,Map<key2,value>>
在这里插入图片描述
购物车
在这里插入图片描述
在这里插入图片描述

E、 有序集合类型 zset (sorted set)
Redis 有序集合zset和集合set一样也是string类型元素的集合,且不允许重复的成员。
不同的是zset的每个元素都会关联一个分数(分数可以重复),redis通过分数来为集合中的成员进行从小到大的排序。
在这里插入图片描述
应用场景:
抖音热搜
销量排行榜
key value member

[root@iZ2ze2nmdlhki02jgpue4yZ opt]# docker exec -it redis redis-cli
127.0.0.1:6379> zadd goods:sellsort 9 1001 15 1002
(integer) 2
127.0.0.1:6379> zrange goods:sellsort 0 10 withscores
1) "1001"
2) "9"
3) "1002"
4) "15"

F:Bitmap
二值状态统计的场景,比如签到、判断用户登陆状态、连续签到用户总数等
看几个例子
可以方便的统计某个位置的值是1还是0

[root@iZ2ze2nmdlhki02jgpue4yZ ~]# docker exec -it redis redis-cli
127.0.0.1:6379> setbit users:20221007 11 1
(integer) 0
127.0.0.1:6379> getbit users:20221007 1
(integer) 0
127.0.0.1:6379> getbit users:20221007 11
(integer) 1
127.0.0.1:6379> bitcount users:20221007
(integer) 1
127.0.0.1:6379> setbit users:20221007 1 1
(integer) 0
127.0.0.1:6379> bitcount users:20221007
(integer) 2

这样我们再进一步的看,可以得到两天都访问过的数据
例如

127.0.0.1:6379> setbit 1007 0 1
(integer) 0
127.0.0.1:6379> setbit 1008 1 1
(integer) 0
127.0.0.1:6379> setbit 1007 1 1
(integer) 0
127.0.0.1:6379> setbit 1007 4 1
(integer) 0
127.0.0.1:6379> setbit 1007 9 1
(integer) 0
127.0.0.1:6379> setbit 1008 2 1
(integer) 0
127.0.0.1:6379> setbit 1008 9 1
(integer) 0

共同的部分就是1和9

127.0.0.1:6379> bitop and result 1007 1008
(integer) 2

bitop and求与运算
result保存当前运算结果,形成新的key


127.0.0.1:6379> get result
"@@"
127.0.0.1:6379> get 1008
"`@"
127.0.0.1:6379> get 1007
"\xc8@"

G:hyperloglog
海量数据基数统计的场景,比如百万级网页 UV 计数等;
其实质相当于一个set,保留不重复的元素
但是他空间占比很小,同时弊端则是不能存取到这些元素

127.0.0.1:6379> pfadd program "java"
(integer) 1
127.0.0.1:6379> pfadd program "php"
(integer) 1
127.0.0.1:6379> pfadd program "java"
(integer) 0
127.0.0.1:6379> pfadd program "c++" "sql"
(integer) 1
127.0.0.1:6379> pfcount program
(integer) 4

我们如果有多个hyperloglog,可以通过pfmerge进行合并

127.0.0.1:6379> pfadd mykey "java" "sql" "C"
(integer) 1
127.0.0.1:6379> pfcount mykey
(integer) 3
127.0.0.1:6379> pfmerge res mykey program
OK
127.0.0.1:6379> pfcount res
(integer) 5
127.0.0.1:6379> pfcount mykey
(integer) 3
127.0.0.1:6379> pfcount program
(integer) 4

program【java,c++,php,sql】
mykey【java,sql,c】
所以他们合并后的结果是5

Redis关于key的操作命令

keys

语法:keys pattern
作用:查找所有符合模式pattern的key. pattern可以使用通配符。
通配符:
 *:表示0或多个字符,例如:keys * 查询所有的key。
 ?:表示单个字符,例如:wo?d , 匹配 word , wood
 [] :表示选择[]内的一个字符,例如wo[or]d, 匹配word, wood, 不匹配wold、woord

 keys h*o:查看数据库中所有以h开头、以o结尾的key
 keys h?o: 查看数据库中所有以h开头、以o结尾的、并且中间只有一个字符的key
 keys h[abc]llo:查看数据库中所有以h开头以llo结尾,并且h后边只能取abc中的一个字符的key

exists

语法:exists key [key…]
作用:判断key是否存在
返回值:整数,存在key返回1,其他返回0。使用多个key,返回存在的key的数量

127.0.0.1:6379> exists k1
(integer) 0
127.0.0.1:6379> exists k1 k2
(integer) 0
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> exists k1 k2
(integer) 1

move(剪切)

语法:move key db
作用:移动key到指定的数据库,移动的key在原库被删除。
返回值:移动成功返回1,失败返回0.

ttl

语法:ttl key
作用:查看key的剩余生存时间(ttl: time to live),以秒为单位。
返回值:
 -1 :没有设置key的生存时间, key永不过期。
 -2:key不存在

127.0.0.1:6379> ttl k1
(integer) -2
127.0.0.1:6379> set k v
OK
127.0.0.1:6379> ttl k
(integer) -1

expire(到期)

语法:expire key seconds
作用:设置key的生存时间,超过时间,key自动删除。单位是秒。
返回值:设置成功返回数字 1,其他情况是 0 。

127.0.0.1:6379> expire k 5
(integer) 1
127.0.0.1:6379> ttl k
(integer) 3
127.0.0.1:6379> ttl k
(integer) -2

type

语法:type key
作用:查看key所存储值的数据类型
返回值:字符串表示的数据类型
 none (key不存在)
 string (字符串)
 list (列表)
 set (集合)
 zset (有序集)
 hash (哈希表)

127.0.0.1:6379> set k v
OK
127.0.0.1:6379> type k
string

rename

语法:rename key newkey
作用:将key改为名newkey。当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。
当 newkey 已经存在时, RENAME 命令将覆盖旧值。

127.0.0.1:6379> rename k mykey
OK
127.0.0.1:6379> keys *
1) "mykey"

del

语法:del key [key…]
作用:删除存在的key,不存在的key忽略。
返回值:数字,删除的key的数量。

redis中有关string类型数据的操作命令

set

语法:set key value

get

语法:get key
功能:获取 key 中设置的字符串值

append

语法:append key value
功能:如果 key 存在,则将 value 追加到 key 原来旧值的末尾
如果 key 不存在,则将key 设置值为 value

127.0.0.1:6379> set k v
OK
127.0.0.1:6379> get k
"v"
127.0.0.1:6379> append k vv
(integer) 3
127.0.0.1:6379> get k
"vvv"

strlen


语法:strlen key
功能:返回 key 所储存的字符串值的长度
返回值:如果key存在,返回字符串值的长度;
		key不存在,返回0

127.0.0.1:6379> strlen k
(integer) 3

incr(increase)

语法:incr key
功能:将 key 中储存的数字值加1,如果 key 不存在,则 key 的值先被初始化为 0 再执行incr操作。
返回值:返回加1后的key值
必须保证value是integer类型

127.0.0.1:6379> set k1 1
OK
127.0.0.1:6379> incr k1
(integer) 2
127.0.0.1:6379> get k1
"2"

decr(decrease)

语法:decr key
功能:将 key 中储存的数字值减1,如果 key 不存在,则么 key 的值先被初始化为 0 再执行 decr 操作。
返回值:返回减1后的key值

127.0.0.1:6379> decr k1
(integer) 1
127.0.0.1:6379> get k1
"1"

incrby decrby

语法:incrby decrby key offset
功能:将 key 所储存的值加上/减去增量值,如果 key 不存在,则 key 的值先被初始化为 0 再执行 INCRBY DECRBY命令。
返回值:返回增量、减量之后的key值。

127.0.0.1:6379> incrby k1 100
(integer) 101
127.0.0.1:6379> get k1
"101"
127.0.0.1:6379> decrby k1 20
(integer) 81
127.0.0.1:6379> get k1
"81"

getrange

语法:getrange key startIndex endIndex
功能:获取 key 中字符串值从 startIndex 开始到 endIndex 结束的子字符串,包括startIndex和endIndex, 负数表示从字符串的末尾开始,-1 表示最后一个字符。

127.0.0.1:6379> set k2 abcde
OK
127.0.0.1:6379> get k2
"abcde"
127.0.0.1:6379> getrange k2 0 1
"ab"

setrange

语法:setrange key offsetIndex value
功能:用value覆盖key的存储的值从offset开始。
返回值:修改后的字符串的长度。

127.0.0.1:6379> setrange k2 2 ww
(integer) 5
127.0.0.1:6379> get k2
"abwwe"

setex

语法:setex key seconds value
功能:设置key的值,并将 key 的生存时间设为 seconds (以秒为单位) ,如果key已经存在,将覆盖旧值。
返回值:设置成功,返回OK

127.0.0.1:6379> setex k2 10 value
OK
127.0.0.1:6379> get k2
"value"

setnx

语法:setnx key value
功能:setnx 是 set if not exists 的简写,如果key不存在,则 set 值,存在则不设置值。
返回值:设置成功,返回1
设置失败,返回0

127.0.0.1:6379> setnx k2 11
(integer) 0
127.0.0.1:6379> setnx kk 1
(integer) 1

mset

语法:mset key value [key value…]
功能:同时设置一个或多个 key-value 对
返回值:设置成功,返回OK。

127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> keys *
1) "k"
2) "kk"
3) "k1"
4) "k3"
5) "k2"

mget

语法:mget key [key …]
功能:获取所有(一个或多个)给定 key 的值
返回值:包含所有key的列表,如果key不存在,则返回nil

127.0.0.1:6379> mget k1 k2 k3 k4
1) "v1"
2) "v2"
3) "v3"
4) (nil)

msetnx

语法:msetnx key value[key value…]
功能:同时设置一个或多个 key-value 对,如果有一个key是存在的则设置不成功。
返回值:设置成功,返回1
设置失败,返回0

列表(List)

Redis列表是简单的字符串列表,按照插入顺序排序,左边(头部)、右边(尾部)或者中间都可以添加元素。链表的操作无论是头或者尾效率都极高,但是如果对中间元素进行操作,那效率会大大降低了。

lpush 和rpush

语法:lpush rpush key value [value…]
功能:将一个或多个值 value 插入到列表 key 的最左、右边(表头),各个value值依次插入到表头、尾位置。
返回值:插入之后的列表的长度。

127.0.0.1:6379> lpush list01 1 2 3
(integer) 3
127.0.0.1:6379> lpush list01 4 5
(integer) 5
127.0.0.1:6379> rpush list01 7 8
(integer) 7

lrange

语法:lrange key startIndex endIndex
功能:获取列表 key 中指定下标区间内的元素,下标从0开始,到列表长度-1;下标也可以是负数,表示列表从后往前取,-1表示倒数第一个元素,-2表示倒数第二个元素,以此类推;startIndex和endIndex超出范围不会报错。
返回值:获取到的元素列表。

127.0.0.1:6379> lrange list01 2 4
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> lrange list01 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
6) "7"
7) "8"

lpop和rpop

语法:lpop key
功能:移除并返回列表key头部第一个元素,即列表左侧的第一个元素。
返回值:列表左侧第一个元素的值;列表key不存在,返回nil。
语法:rpop key
功能:移除并返回列表key尾部第一个元素,即列表右侧的第一个元素。
返回值:列表右侧第一个元素的值;列表key不存在,返回nil。

127.0.0.1:6379> lpop list01
"5"
127.0.0.1:6379> rpop list01
"8"

lindex

语法:lindex key index
功能:获取列表 key 中下标为指定 index 的元素,列表元素不删除,只是查询。0 表示列表的第一个元素,1 表示列表的第二个元素;index也可以负数的下标, -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

127.0.0.1:6379> lindex list01 2
"2"
127.0.0.1:6379> lindex list01 -1
"7"

llen

语法:llen key
功能:获取列表 key 的长度
返回值:数值,列表的长度;key不存在返回0

127.0.0.1:6379> llen list01 
(integer) 5

lrem

语法:lrem key count value
功能:根据参数 count 的值,移除列表中与参数 value 相等的元素,
count >0 ,从列表的左侧向右开始移除;
count < 0 从列表的尾部开始移除;
count = 0移除表中所有与 value 相等的值。
返回值:数值,移除的元素个数

127.0.0.1:6379> lpush list01 a a b b
(integer) 9
127.0.0.1:6379> lrem list01 2 a
(integer) 2
127.0.0.1:6379> lrem list01 -2 a
(integer) 0
127.0.0.1:6379> lrem list01 0 a
(integer) 0

集合类型(set)

Redis的Set是string类型的无序不重复集合。
集合类型的数据操作总的思想是通过key确定集合,key是集合标识,元素没有下标,只有直接操作业务数据和数据的个数。

sadd

语法:sadd key member [member…]
功能:将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略,不会再加入。
返回值:加入到集合的新元素的个数(不包括被忽略的元素)。

smembers

语法:smembers key
功能:获取集合 key 中的所有成员元素,不存在的key视为空集合。
返回值:返回指定集合的所有元素集合,不存在的key,返回空集合。

sismember

语法:sismember key member
功能:判断 member 元素是否是集合 key 的元素
返回值:member是集合成员返回1,其他返回 0 。

scard

语法:scard key
功能:获取集合里面的元素个数
返回值:数字,key的元素个数。其他情况返回 0 。

127.0.0.1:6379> sadd set01 a a b b c c
(integer) 3
127.0.0.1:6379> smembers set01
1) "b"
2) "a"
3) "c"
127.0.0.1:6379> sadd set01 b 
(integer) 0
127.0.0.1:6379> sismember set01 b
(integer) 1
127.0.0.1:6379> sismember set01 x
(integer) 0
127.0.0.1:6379> scard set01
(integer) 3

srem

语法:srem key member [member…]
功能:移除集合中一个或多个元素,不存在的元素被忽略。
返回值:数字,成功移除的元素个数,不包括被忽略的元素。

srandmember

语法:srandmember key[count]
功能:只提供key,随机返回集合中一个元素,元素不删除,依然在集合中;
提供了count时,count 正数, 返回包含count个数元素的集合,集合元素各不重复。count是负数,返回一个count绝对值的长度的集合,集合中元素可能会重复多次。
返回值:一个元素或者多个元素的集合

127.0.0.1:6379> srem set01 a
(integer) 1
127.0.0.1:6379> smembers set01
1) "b"
2) "c"
127.0.0.1:6379> srandmember set01 2
1) "b"
2) "c"

spop

语法:spop key[count]
功能:随机从集合中删除一个或count个元素。
返回值:被删除的元素,key不存在或空集合返回nil

smove

语法:smove src dest member
功能:将 member 元素从src集合移动到dest集合,member不存在,smove不执行操作,返回0,如果dest存在member,则仅从src中删除member。
返回值:成功返回 1 ,其他返回 0

sdiff

语法:sdiff key key [key…]
功能:返回指定集合的差集,以第一个集合为准进行比较,即第一个集合中有但在其它任何集合中都没有的元素组成的集合。
返回值:返回第一个集合中有而后边集合中都没有的元素组成的集合,如果第一个集合中的元素在后边集合中都有则返回空集合。

127.0.0.1:6379> spop set01
"c"
127.0.0.1:6379> smove set01 set02 b
(integer) 1
127.0.0.1:6379> sadd set01 a b c
(integer) 3
127.0.0.1:6379> sdiff set01 set02
1) "a"
2) "c"

sinter

语法:sinter key key [key…]
功能:返回指定集合的交集,即指定的所有集合中都有的元素组成的集合。
返回值:交集元素组成的集合,如果没有则返回空集合。

sunion

语法:sunion key key [key…]
功能:返回指定集合的并集,即指定的所有集合元素组成的大集合,如果元素有重复,则保留一个。
返回值:返回所有集合元素组成的大集合,如果所有key都不存在,返回空集合

127.0.0.1:6379> sdiff set01 set02
1) "a"
2) "c"
127.0.0.1:6379> sinter set01 set02
1) "b"
127.0.0.1:6379> sunion set01 set02
1) "a"
2) "b"
3) "c"

哈希类型(hash)

Redis的hash 是一个string类型的key和value的映射表,这里的value是一系列的键值对,hash特别适合用于存储对象。
哈希类型的数据操作总的思想是通过key和field操作value,key是数据标识,field是域,value是我们感
兴趣的业务数据。

hset

语法:hset key field value [field value …]
功能:将键值对field-value设置到哈希列表key中,如果key不存在,则新建哈希列表,然后执行赋值,如果key下的field已经存在,则value值覆盖。
返回值:返回设置成功的键值对个数

hget

语法:hget key field
功能:获取哈希表 key 中给定域 field 的值。
返回值:field域的值,如果key不存在或者field不存在返回nil。

127.0.0.1:6379> hset user id 1001
(integer) 1
127.0.0.1:6379> hset user name zhangsan
(integer) 1

127.0.0.1:6379> hset user age 20 sex male
(integer) 2
127.0.0.1:6379> hget user id
"1001"

127.0.0.1:6379> hget user age
"20"

hmset

语法:hmset key field value [field value…]
功能:同时将多个 field-value (域-值)设置到哈希表 key 中,此命令会覆盖已经存在的field,hash表key不存在,创建空的hash表,再执行hmset.
返回值:设置成功返回ok,如果失败返回一个错误

hmget

语法:hmget key field [field…]
功能:获取哈希表 key 中一个或多个给定域的值
返回值:返回和field顺序对应的值,如果field不存在,返回nil

127.0.0.1:6379> hmset user id 1002 name zs age 15
OK
127.0.0.1:6379> hmget user id name email age
1) "1002"
2) "zs"
3) (nil)
4) "15"
127.0.0.1:6379> hset user id 1002 name zs age 15
(integer) 0
127.0.0.1:6379> hset user2 id 1002 name zs age 15
(integer) 3

127.0.0.1:6379> hmget user2 id name email age
1) "1002"
2) "zs"
3) (nil)
4) "15"

hgetall

语法:hgetall key
功能:获取哈希表 key 中所有的域和值
返回值:以列表形式返回hash中域和域的值,key不存在,返回空hash

127.0.0.1:6379> hgetall user2
1) "id"
2) "1002"
3) "name"
4) "zs"
5) "age"
6) "15"

hdel

语法:hdel key field [field…]
功能:删除哈希表 key 中的一个或多个指定域field,不存在field直接忽略。
返回值:成功删除的field的数量。

127.0.0.1:6379> hdel user2 id
(integer) 1
127.0.0.1:6379> hdel user2 name age
(integer) 2
127.0.0.1:6379> hgetall user2
(empty list or set)

hlen

语法:hlen key
功能:获取哈希表 key 中域field的个数
返回值:数值,field的个数。key不存在返回0

hexists

语法:hexists key field
功能:查看哈希表 key 中,给定域 field 是否存在
返回值:如果field存在,返回1,其他返回0。

hkeys

语法:hkeys key
功能:查看哈希表 key 中的所有field域列表
返回值:包含所有field的列表,key不存在返回空列表

hvals

语法:hvals key
功能:返回哈希表 中所有域的值列表
返回值:包含哈希表所有域值的列表,key不存在返回空列表

127.0.0.1:6379> hmset user2 name zs age 20 sex male
OK
127.0.0.1:6379> hlen user2
(integer) 3
127.0.0.1:6379> hexists user2 address
(integer) 0
127.0.0.1:6379> hexists user2 age
(integer) 1
127.0.0.1:6379> hkeys user2
1) "name"
2) "age"
3) "sex"
127.0.0.1:6379> hvals user2
1) "zs"
2) "20"
3) "male"

hincrby

语法:hincrby key field int
功能:给哈希表key中的field域增加int
返回值:返回增加之后的field域的值

hincrbyfloat

语法:hincrbyfloat key field float
功能:给哈希表key中的field域增加float
返回值:返回增加之后的field域的值

127.0.0.1:6379> hincrby user2 score 2
(integer) 2
127.0.0.1:6379> hincrbyfloat user2 score 1.5
"3.5"
127.0.0.1:6379> hget user2 score
"3.5"

hsetnx

语法:hsetnx key field value
功能:将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在的时候才设置,否则不设置。
返回值:设值成功返回1,其他返回0.

127.0.0.1:6379> hsetnx user name lisi
(integer) 0
127.0.0.1:6379> hsetnx user email 123@123.com
(integer) 1

有序集合类型(Zset)

Redis 有序集合zset和集合set一样也是string类型元素的集合,且不允许重复的成员。
不同的是zset的每个元素都会关联一个分数(分数可以重复),redis通过分数来为集合中的成员进行从小到大的排序。

zadd

语法:zadd key score member [score member…]
功能:将一个或多个 member 元素及其 score 值加入到有序集合 key 中,如果member存在集合中,则覆盖原来的值;score可以是整数或浮点数.
返回值:数字,新添加的元素个数.

zrange

语法:zrange key startIndex endIndex [WITHSCORES]
功能:查询有序集合,指定区间的内的元素。集合成员按score值从小到大来排序;startIndex和endIndex都是从0开始表示第一个元素,1表示第二个元素,以此类推; startIndex和endIndex都可以取负数,表示从后往前取,-1表示倒数第一个元素;WITHSCORES选项让score和value一同返回。
返回值:指定区间的成员组成的集合。

zrangebyscore

语法:zrangebyscore key min max [WITHSCORES ] [LIMIT offset count]
功能:获取有序集 key 中,所有 score 值介于 min 和 max 之间(包括min和max)的成员,有序成员是按递增(从小到大)排序;
使用符号”(“ 表示包括min但不包括max;
withscores 显示score和 value;
limit用来限制返回结果的数量和区间,在结果集中从第offset个开始,取count个。
返回值:指定区间的集合数据

127.0.0.1:6379> zadd zset01 20 z1 30 z2 40 z3 10 z4
(integer) 4

127.0.0.1:6379> zrange zset01 0 -1
1) "z4"
2) "z1"
3) "z2"
4) "z3"

127.0.0.1:6379> zrangebyscore zset01 25 35
1) "z2"
127.0.0.1:6379> zrangebyscore zset01 25 35 withscores
1) "z2"
2) "30"
127.0.0.1:6379> zrangebyscore zset01 25 (35 withscores
1) "z2"
2) "30"

zrem

语法:zrem key member [member…]
功能:删除有序集合 key 中的一个或多个成员,不存在的成员被忽略。
返回值:被成功删除的成员数量,不包括被忽略的成员。

zcard

语法:zcard key
作用:获取有序集 key 的元素成员的个数。
返回值:key存在,返回集合元素的个数; key不存在,返回0。

zcount

语法:zcount key min max
功能:返回有序集 key 中, score 值在 min 和 max 之间(包括 score 值等于 min 或 max )的成员的数量。
返回值:指定有序集合中分数在指定区间内的元素数量。

127.0.0.1:6379> zrem zset01 z4
(integer) 1
127.0.0.1:6379> zrem zset01 z4 z3
(integer) 1
127.0.0.1:6379> zcard zset01
(integer) 2

127.0.0.1:6379> zcount zset01 10 50
(integer) 2

zrank

语法:zrank key member
功能:获取有序集 key 中成员 member 的排名,有序集成员按 score 值从小到大顺序排列,从0开始排名,score最小的是0 。
返回值:指定元素在有序集合中的排名;如果指定元素不存在,返回nil

zscore

语法:zscore key member
功能:获取有序集合key中元素member的分数。
返回值:返回指定有序集合元素的分数。

127.0.0.1:6379> zrange zset01 0 -1 withscores
1) "z1"
2) "20"
3) "z2"
4) "30"
127.0.0.1:6379> zrank zset01 z2
(integer) 1

127.0.0.1:6379> zscore zset01 z1
"20"

zrevrank

语法:zrevrank key member
功能:获取有序集 key 中成员 member 的排名,有序集成员按 score 值从大到小顺序排列,从0开始排名,score最大的是0 。
返回值:指定元素在有序集合中的排名;如果指定元素不存在,返回nil

zrevrange

语法:zrevrange key startIndex endIndex [WITHSCORES]
功能:查询有序集合,指定区间的内的元素。集合成员按score值从大到小来排序;startIndex和endIndex都是从0开始表示第一个元素,1表示第二个元素,以此类推; startIndex和endIndex都可以取负数,表示从后往前取,-1表示倒数第一个元素;WITHSCORES选项让score和value一同返回。
返回值:指定区间的成员组成的集合。

zrevrangebyscore

语法:zrevrangebyscore key max min [WITHSCORES ] [LIMIT offset count]
功能:获取有序集 key 中,所有 score 值介于 max 和 min 之间(包括max和min)的成员,有序成员是按递减(从大到小)排序;
使用符号”(“ 表示不包括min和max;
withscores 显示score和 value;
limit用来限制返回结果的数量和区间,在结果集中从第offset个开始,取count个。
返回值:指定区间的集合数据

127.0.0.1:6379> zrange zset01 0 -1
1) "z1"
2) "z2"
3) "z4"
4) "z6"
5) "z5"
6) "z3"
127.0.0.1:6379> zrevrank zset01 z5
(integer) 1

127.0.0.1:6379> zrevrange zset01 0 -1 withscores
 1) "z3"
 2) "90"
 3) "z5"
 4) "80"
 5) "z6"
 6) "70"
 7) "z4"
 8) "50"
 9) "z2"
10) "30"
11) "z1"
12) "20"

127.0.0.1:6379> zrevrangebyscore zset01 50 20
1) "z4"
2) "z2"
3) "z1"


结束时间:2022-03-25

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当出现"redis-cli: command not found"的错误提示时,通常是由于Redis客户端(redis-cli)未正确安装或未设置环境变量所致。 为了解决这个问题,你可以按照以下步骤进行操作: 1. 首先,确认你已经正确地安装了Redis服务端。你可以通过在终端中输入"redis-server"命令来验证是否已成功安装Redis服务器。 2. 如果Redis服务器已经正确安装,但是仍然无法找到redis-cli命令,那么可能是因为redis-cli未被正确地安装。 3. 你可以尝试使用以下命令安装redis-cli: ``` sudo apt-get install redis-tools ``` 或者 ``` sudo yum install redis ``` 4. 如果以上命令安装失败或无效,可以使用以下方法手动安装redis-cli: - 首先,从Redis官方网站下载最新的Redis源代码,并解压缩。 - 进入解压缩后的Redis源代码目录,并执行以下命令: ``` make redis-cli ``` - 这将编译并生成redis-cli可执行文件。 - 将生成的redis-cli可执行文件拷贝到/usr/local/bin/目录下,以便在任意目录下都可以直接使用redis-cli命令。你可以使用以下命令完成此操作: ``` sudo cp src/redis-cli /usr/local/bin/ ``` 5. 安装完成后,再次在终端中尝试执行"redis-cli"命令,确认是否已成功解决问题。 希望这些步骤可以帮助你解决"redis-cli: command not found"的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [redis-cli: command not found](https://blog.csdn.net/weixin_44018338/article/details/99301540)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值