一、概念:

redis是一款高性能的NOSQL系列的非关系型数据库,主要的数据类型有String(字符串类型)、Hash(哈希类型)、List(链式列表类型)、Set(集合类型)、SortedSet(有序集合类型)

二、Redis的基本操作

  • help命令查询
help @string            # 查询string类型命令
help @hash              # 查询hash命令
help @list              # 查询list命令
help @set                   # 查询set命令
help @zset              # 查询zset命令
help @cluster           # 查询集群命令
help @generic           # 查询通用命令

#......等等其他命令,可以使用Table键提示
  • 服务器相关命令
# 1、启动 Redis(需要配置环境变量,否则要切换到安装目录下的 bin 目录执行)
#(1)方法一、前台启动
redis-server  
#(2)方法二、后台启动(需要修改 redis.conf 里的 daemonize 的值为 yes)
redis-server redis.conf

# 2、查看是否启动
#(1)方法一、ping 一下,返回 pong 则启动成功
redis-cli ping
#(2)方法二、查看端口
ps -ef | grep -i redis

# 3、启动客户端
redis-cli  #(中文会乱码)
redis-cli --raw #(中文不乱吗)

#4、停止 Redis
redis-cli shutdown
  • keys键操作

示例所有Key名都为xiaochen为示例

# 选择指定数据库
select 1  # 选择 1 号数据库

# 返回所有满足给定 pattern 的 key
keys *    # 返回所有的 key
keys my*  # 返回 my 开头的 key

# 判断某个Key是否存在 (存在返回 1,不存在返回 0)
exists <key>
exists xiaochen

# 查询某个Key的类型
type <key>
type xiaochen

# 删除某个Key,返回一条影响行数,1表示true,删除成功
del <key>
del xiaochen
del xiaochen1 xiaochen2# 删除两个键值对

# 修改一个 key 的名称
rename <key> <key>
rename name username# 将 key 为 name 改成 username

# 给Key设置超时时间,单位秒,返回一表示true,设置成功
expire <key> <seconds>
expire xiaochen 30# xiaochen 这个 key 将在 100 秒后被删除

# 查询Key过期时间,返回秒数正数为超时时间,,-1表示永不过期,-2表示已过期
ttl <key>
ttl xiaochen

# 查看当前数据库的key的数量(单个库)
dbsize

# 将 key 移到指定数据库
move <key> <key>
move xiaochen xc# 将 xiaochen 从当前数据库移到 xc

# 清空当前库
Flushdb

# 清空所有库
Flushall
  1. 字符串(String)的操作

help @string            # 查询string类型命令
# 查询Key对应键值
get  <key>
get xiaochen

# 设置值,添加键值对,给xiaochen赋值为123,没有则创建xiaochen
set <key> <value>
set xiaochen 123

# 批量设置键值对
mset <key1> <value1> <key2> <value2>
mset xiaochen1 1 xiaochen2 2

# 批量获得值
mget <key1> <key2>
mget xiaochen1 xiaochen2

# 同时设置一个或多个 key-value 对,如果不存在则设置,如果其中一个条件不满足则都失败
msetnx <key1> <value1> <key2> <value2> 
msetnx xiaochen4 1 xiaochen5 2 xiaochen6 3

# 追加,给xiaochen追加456
append <key> <value>
append xiaochen 456

# 查询Key长度,这个key的长度也就是length
strlen <key>
strlen xiaochen

# 设置值,如果不存在则设置一个值,如果存在则设置失败
setnx <key> <value>
setnx xiaochen 123

# 给Key值增加1,类似于i++操作,如果是字符串将无返回,必须为数据,返回值为修改后的Value
incr <key>
incr xiaochen

# 给Key值减少1,类似于i--操作,如果是字符串将无返回,必须为数据,返回值为修改后的Value
decr <key>
decr xiaochen

# 指定Key添加或者减少一定的数量,给xiaochen这个key的Value添加100,然后再减少100,返回值为修改后的Value
incrby / decrby <key> <步长>
incrby xiaochen 100
decrby xiaochen 100

# 截取范围,获得值的范围,类似java中的substring,起始下标为0,只返回到结尾,超出正常返回
getrange <key> <起始位置> <结束位置>
getrange xiaochen 0 10

# 插入值,从指定位置插入字符串,返回字符串长度
setrange <key> <起始位置> <value>
setrange xiaochen 0 big

# 设置键值的同时,设置过期时间,单位秒
setex <key> <过期时间> <value>

# 获取以前的值写入新的值
getset <key> <value>
getset xiaochen 123
  1. 哈希(Hash)的操作

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。

help @hash          # 查询hash类型命令
# 设置Hash值,Hash类似以Java中的Map,Hash的Key存在返回0,不存在返回1,如果是String则报错,设置name 为 xchen,age为 18
hset <key> <field> <value>
hset xiaochen name xchen

# 从Hash中取出某个属性的Value值
hget <key> <field>
hget xiaochen name

# 批量设置Hash的值
hmset <key> <field1> <value1> <field2> <value2>
hmset xiaochen name xchen age 18

# 批量获取值
hmget <key> <field1> <field2> 
hmget xiaochen name age

# 获得一个哈希表的所有字段和值
hgetall <key>
hgetall xiaochen

# 删除一个哈希表里的字段
hdel <key> <field> ...
hdel xiaochen name# 删除 myhash 里的一个字段
hdel xiaochen age sex# 删除多个字段

#删除整个哈希表
del <key>
del xiaochen

# 判断field是否存在,返回0 OR 1,对应True,False
hexists <key> <field>
hexists xiaochen name

# 列出一个哈希表中字段数量
hlen <key>
hlen xiaochen

# 列出某个key的所有field
hkeys <key>
hkeys xiaochen

# 列出某个key的所有Value
hvals <key>
hvals xiaochen

# 为哈希表 key 中的域 field 的值加上增量 increment
hincrby <key> <field> <increment>
hincrby xiaochen age 1

# 将哈希表 key 中的域 field 的值设置为 value ,不存在时进行设置,存在不设置
hsetnx <key> <field> <value>
hsetnx xiaochen name xchen
  1. 字符串链表(list)的操作

List 是一个有序的集合,一般常用的有以下两种实现
一个是 ArrayList,基于数组的,随机访问和查找快;
一个是 LinkedList,基于链表的,插入和删除较快。

help @list          # 查询list类型命令
# 从左边/右边插入一个或多个值
lpush/rpush <key> <value1> <value2> <value3>
# 左边插入
lpush xiaochen 1 2 3
# 右边插入
rpush xiaochen 4 5 6

# 向已存在的列表从左侧添加元素(列表不存在返回0)
lpushx xiaochen e f g

# 向已存在的列表从右侧添加元素(列表不存在返回0)
rpushx xiaochen e f g

# 按照起始位置结束位置范围获得元素(从左到右),索引从0开始
lrange <key> <start> <stop>
lrange xiaochen 0 3

#  从左边/右边吐出一个值(删除后返回)
lpop/rpop key
# 从左边吐出
lpop xiaochen
# 从右边吐出
rpop xiaochen

# 从一个列表右边吐出一个值,插到另一个列表左边
rpoplpush <key1> <key2>
rpoplpush xiaochen bigkang1

# 按照索引下标获得元素(从左到右),索引从0开始
lindex <key> <index>
lindex xiaochen 2

# 获得列表长度
llen <key>
llen xiaochen

# 根据Key找到某个值,并且在他前面/后面插入一个值
linsert <key> AFTER/BEFORE <value> <newvalue>
# 在xiaochen这个key的值为1的前面插入0.9
linsert xiaochen AFTER 1 0.9
# 在xiaochen这个key的值为1的后面插入1.1
linsert xiaochen BEFORE 1 1.1

# 从根据某个Key,找到Value,删除这个Value几个个数
lrem <key> <n> <value>
# 在xiaochen中,从左边开始查询,删除1这个元素,删除两个(可能元素List中有多个1)
lrem xiaochen 2 1

# 设置指定坐标的值(替换已存在的元素,但下标不能越界)
lset xiaochen 3 mm    设置下标为3的元素为 mm
  1. 字符串集合(set)的操作

help @set           # 查询set类型命令
# 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略,插入成功返回1,插入失败表示0已经存在
sadd <key> <value1> <value2> .....  
sadd xiaochen 1 2 3
# 取出该集合的所有值
smembers <key>
smembers xiaochen

# 返回该集合的元素个数
scard <key>
scard xiaochen

# 判断集合<key>是否为含有该<value>值,有返回1,没有返回0
sismember <key> <value>
sismember xiaochen 1

# 删除集合中的某个元素
srem <key> <value1> <value2> ....   
srem xiaochen 1 2 3

# 随机从该集合中吐出一个值,会将原来的值删除
spop <key>
spop xiaochen

# 随机从该集合中取出n个值。 不会从集合中删除
srandmember <key> <n>
srandmember xiaochen 3

# 返回两个集合的交集元素,如xiaochen有1,xiaochen2也有1,则返回1,所有相同的都会返回
sinter <key1> <key2>
sinter xiaochen xiaochen2

# 返回两个集合的并集元素,例如xiaochen为 1 2 3,xiaochen2 为 3 4 5 ,则返回1 2 3 4 5
sunion <key1> <key2>
sunion xiaochen xiaochen2

# 返回两个集合的差集元素,例如xiaochen为 1 2 3,xiaochen2 为 3 4 5 ,则返回1 2 4 5
sdiff <key1> <key2>
sdiff xiaochen xiaochen2

# 将两个集合的交集放到一个新的集合里
sadd set a b c d
sadd set2 c d e f
sinterstore newset set set2   
# 最终 newset 结果为 c d

# 将两个集合的并集放到一个新的集合里
sadd set a b c d
sadd set2 c d e f
sunionstore newset set set2   
# 最终 newset 结果为 a b c d e f

# 将两个集合的差集放到一个新的集合里
sadd set a b c d
sadd set2 c d e f
sdiffstore newset set set2   
# 最终 newset 结果为 a b
  1. 有序字符串集合(zset)的操作

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

help @sorted_set            # 查询zset类型命令
# 将一个或多个 member 元素及其 score 值加入到有序集 key 当中,zset会根据score排序
zadd <key> <score1> <value1> <score2> <value2>...   
zadd bigkang 1 A 2 B 3 C

# 查询指定元素的分数
zscore <key> <value>
zscore mysort 言曌

# 查询集合的元素个数
zcard <key>
zcard mysort

# 返回有序集 key 中,下标在<start> <stop>之间的元素,带WITHSCORES,可以让分数一起和值返回到结果集,索引从0开始,0 1 会包含0 和 1
zrange <key> <start> <stop> [WITHSCORES]
# 带分数返回0 到 2 三个值,并且返回分数,从小到大
zrange bigkang 0 2 WITHSCORES
# 不返回分数
zrange bigkang 0 2

# 同上,顺序相反,从大到小
zrevrange bigkang 0 2
# -1表示返回所有
zrevrange bigkang 0 -1

# 返回有序集 key 中,分数在min到max中的值(包含),有序集成员按 score 值递增(从小到大)次序排列
zrangebyscore key min max [withscores][limit offset count]
zrangebyscore bigkang 1 2.5 WITHSCORES

# 同上,改为从大到小排列,max min相反
zrevrangebyscore key max min [withscores][limit offset count]
zrevrangebyscore bigkang 2.5 1 WITHSCORES

# 为元素的score加上增量
zincrby <key> <increment> <value>
zincrby bigkang 3 A

# 删除该集合下,指定值的元素
zrem <key> <value>
zrem bigkang A

# 按照排名删除
zremrangebyrank<key> <start> <stop>
zremrangebyrank mysort 0 2  # 删除排名前三的(从小到大的顺序)

# 按照分数范围删除
zremrangebyscore <key> <start> <stop>
zremrangebyscore mysort 80 100    #删除 0-60 分的元素

# 统计该集合,分数区间内的元素个数
zcount <key> <min> <max>
zcount bigkang 1 20

# 返回该值在集合中的排名,从0开始,返回索引下标,从小到大
zrank <key> <value>
zrank bigkang B   
最后修改:2022 年 05 月 22 日
如果觉得我的文章对你有用,请随意赞赏