Redis基础使用

1 安装

环境:Ubuntu

# 安装
sudo apt install redis-server

# 查看安装版本
redis-server --version

# 启动服务
service redis-server start

# 通过命令行使用Redis数据库
redis-cli
# 测试ping,返回PONG
ping

# 关闭服务
service redis-server stop


安装后,我们就有了这些工具
|500

2 启动Redis

配置redis.conf文件,根据配置进行启动

# 直接启动
redis-server [/path/to/redis.conf]

# 停止
redis-cli shutdown

redis.conf文件模板可能会在/etc/redis/redis.conf,你可以通过find命令查找看看
|500
添加一些键值对

set hello world
set java jedis
set python redis-py
rpush my_list a b c d e f g

|500

3 单线程架构和I/O多路复用模型

因为Redis使用了单线程架构和I/O多路复用模型来实现高性能的内存数据库服务。
所以当我们同时启动两个客户端各自执行命令时,Redis服务器接收到两个命令后,所有命令会进入一个队列,然后被顺序执行。不会产生并发问题。
(Redis 6.0引入了多线程)

4 通用命令

Redis是基于key-value的数据结构服务器,它的value有五种数据结构,操作各不相同。但是针对key有一些通用的指令

4.1 keys-查看所有键

keys *

|400

4.2 dbsize-键数量

dbsize

|400

4.3 exists-检查键是否存在

exists java
exists not_exist_key

|400

4.4 del-删除键

del java

|400

4.5 expire/ttl-键过期

expire python 15
ttl python

|400

4.6 type-键的数据结构类型

type hello
type mylist

|400

5 五种数据结构

|305
每种数据结构底层都有多种内部编码实现

5.1 object encoding-查询内部编码

object encoding hello
object encoding mylist

|575

6 字符串

6.1 常用命令

6.1.1 set/setex/setnx-设置值

set key value [ex seconds] [px milliseconds] [nx|xx]
setex key seconds value
setnx key value

ex seconds秒级过期时间、px millisenconds毫秒级过期时间、nx不存在才设置、xx存在才设置
|700

6.1.2 get-获取值

get key

|700

6.1.3 mset/mget-批量设置与获取

mset a aa b bb c cc
mget a b cc

|700

6.1.4 incr/incrby/incrbyfloat/decr/decrby-计数

incr key
incrby key increment
incrbyfloat key increment

decr key
decrby key decrement

6.2 不常用命令

6.2.1 append-追加值

append key value

6.2.2 strlen-字符串长度

strlen key

6.2.3 getset-设置并返回值

getset key value

6.2.4 setrange-设置指定位置的字符

setrange key offset value

6.2.5 getrange-获取部分字符串

getrange key start end

6.3 三种编码方式

int:8个字节的长整型

embstr:小于等于44个字节的字符串

raw:大于44个字节的字符串

7 哈希

7.1 命令

7.1.1 hset/hsetnx-设置值

hsetnx:当key不存在时才能成功设置值

hset key field value
hsetnx not_exist_key field value

7.1.2 hget-获取值

hget key field

7.1.3 hdel-删除field

返回成功删除field的个数

hdel key field [field ...]

7.1.4 hlen-计算field个数

hlen key

7.1.5 hmset/hmget-批量设置或获取

hmset key field value [field value ...]
hmget key field [field ...]

7.1.6 hexists-判断field是否存在

hexists key field

7.1.7 hkeys-获取所有的field

hkeys key

7.1.8 hvals-获取所有的value

hvals key

7.1.9 hgetall-获取所有的field-value

hgetall key

7.1.10 hincrby/hincrbyfloat-计数

hincrby key field increment
hincrbyfloat key field increment

7.1.11 hstrlen-计算value的字符串长度

hstrlen key field

7.2 两种内部编码

ziplist:元素个数小于配置(默认512) && 所有值都小于配置(默认64个字节)

hashtable:无法满足ziplist条件时

8 列表

8.1 添加

8.1.1 rpush-从右边插入元素

rpush key value [value ...]

8.1.2 lpush-从左边插入元素

lpush key value [value ...]

8.1.3 linsert-向某个元素前或者后插入元素

linsert key before|after pivot value

8.2 查找

8.2.1 lrange-获取指定范围内的元素列表

lrange key start end

索引下标,从左到右分别是0到n-1,从右到左是-1到-n

8.2.2 lindex-获取列表指定索引下标的元素

lindex key index

8.2.3 llen-获取列表长度

llen key

8.3 删除

8.3.1 lpop-从列表左侧弹出

lpop key

8.3.2 rpop-从列表右侧弹出

rpop key

8.3.3 lrem-删除指定元素

lrem key count value

count>0,从左到右,删除最多count个value
count<0,从右到左,删除最多count个value
count=0,删除所有value

8.3.4 ltrim-按照索引范围修建列表

ltrim key start end

8.4 修改

8.4.1 lset-修改指定索引下标的元素

lset key index newValue

8.5 阻塞

8.5.1 blpop/brpop-阻塞式弹出

blpop key [key ...] timeout
brpop key [key ...] timeout

从左至右便利所有键,一旦有列表不为空,立即弹出数据返回,不然等待timeout时间(timeout=0时,将一直等待)

8.6 内部编码

ziplist:当列表的元素个数小于配置(默认512个),且每个元素的值都小于配置(默认64字节)时
linkedlist:上述条件无法满足时

quicklist:以ziplist为节点的linkedlist,结合了两者的优势

9 集合

9.1 集合内命令

9.1.1 sadd-添加元素

sadd key element [element ...]

9.1.2 srem-删除元素

srem key element [element ...]

9.1.3 scard-计算元素个数

scard key

9.1.4 sismember-判断元素是否在集合中

sismember key element

9.1.5 srandmember-随机从集合返回指定个数元素

srandmember key [count]

9.1.6 spop-从集合随机弹出元素

spop key [count]

spopsrandmember的区别是,spop会删除取出的元素,srandmember不会

9.1.7 smembers-获取所有元素

smembers key

9.2 集合间命令

9.2.1 sinter-求交集

sinter key [key ...]

9.2.2 sunion-求并集

sunion key [key ...]

9.2.3 sdiff-求差集

sdiff key [key ...]

9.2.4 sinterstore/sunionstore/sdiffstore-保存结果

sinterstore dest_key key [key ...]
sunionstore dest_key key [key ...]
sdiffstore dest_key key [key ...]

9.3 两种内部编码

intset:元素都是整数且元素个数小于配置(默认512个)

hashtable:不满足intset条件时

10 有序集合

10.1 集合内命令

10.1.1 zadd-添加成员

zadd key [nx|xx] [ch] [incr] score member [score member ...]

有序集合以score为依据进行排序
nxmember必须不存在,才能设置成功,用于添加
xxmember必须存在,才能设置成功,用于更新
ch:返回此次操作后,有序集合发生变化的个数
incr:对score做增加,等价于zincrby

10.1.2 zcard-计算成员个数

zcard key

10.1.3 zscore-返回某个成员的分数

zscore key member

10.1.4 zrank/zrevrank-计算成员的排名

zrank key member
zrevrank key member

zrank:升序
zrevrank:降序

10.1.5 zrem-删除成员

zrem key member [member ...]

10.1.6 zincrby-增加成员分数

zincrby key increment member

10.1.7 zrange/zrevrange-返回指定排名范围的成员

zrange key start end [withscores]]
zrevrange key start end [withscores]

10.1.8 zrangebyscore/zrevrangebyscore-返回指定分数范围的成员

zrangebyscore key min max [withscores] [limit offset count]
zrevrangebyscore key max min [withscores] [limit offset count]

limit选项:限制输出的起始位置和个数
maxmin选项:支持+inf-inf(开区间

10.1.9 zcount-返回指定分数范围成员个数

zcount key min max

10.1.10 zremrangebyrank-删除指定排名内的升序元素

zremrangebyrank key start end

10.1.11 zremrangebyscore-删除指定分数范围的成员

zremrangebyscore key min max

10.2 集合间命令

10.2.1 zinterstore-交集

zinterstore dest_key num_of_keys key [key ...] [weights weight [weight ...]] [aggregate sum|min|max]

weights:默认为1
aggregate:默认是sum

10.2.2 zunionstore-并集

zunionstore dest_key num_of_keys key [key ...] [weights weight [weight ...]] [aggregate sum|min|max]

10.3 内部编码

ziplist:元素个数小于配置(默认128个)且每个元素的值都小于配置(默认64字节)时

skiplist:无法满足ziplist条件时

11 键管理

11.1 单个键

11.1.1 rename-键重命名

rename key newkey
renamenx key newkey


如果rename之前,键key_new_test已存在,则会被覆盖,为避免被覆盖,可以用renamenx

11.1.2 randomkey-随机返回一个键

randomkey

11.1.3 expire/ttl/expireat/persist-键过期

expire key seconds
pexpire key milliseocnds

expireat key timestamp
pexpireat key milliseconds-timestamp

ttl key
pttl key 

persist

expire设置秒级过期时间,pexpire设置毫秒级过期时间
无论使用过期时间、时间戳、秒级、毫秒级,Redis内部最终都使用pexpirat
ttl=-1表示没设置过期时间,ttl=-2表示键不存在
persist:清除键过期设置(set命令也可以清除过期时间

11.1.4 move/dump+restore/migrate-迁移键

move key db

Redis内部默认有16个数据库(0-15),通过move可以进行数据迁移,但不建议这样操作

dump key
restore key ttl serialized_value [replace]

replace选项:已存在key则替换它的内容
ttl=0:表示不设置过期时间

migrate host port key|"" destination-db timeout [copy] [replace] [keys key [key ...]]

host:目标Redis的IP地址
port:目标Redis的端口号
key|"":只迁移一个键时填写key,迁移多个填写空字符串
destination-db:目标Redis的数据库索引
timeout:超时时间设置
copy:迁移后并不删除源键
replace:不管目标Redis是否存在都会正常迁移进行数据覆盖
keys key [key ...]:迁移多个键

11.2 遍历键

11.2.1 keys-全量遍历键

keys pattern


利用模式匹配,删除所有以a开头的键

redis-cli keys a* | xargs redis-cli del

11.2.2 scan-渐进式遍历

渐进式遍历可以有效的解决keys命令可能产生的阻塞问题,但是如果在scan的过程中如果有键的变化,可能出现:新增的键可能没有遍历到、遍历出现了重复的键等问题

scan cursor [match pattern] [count count]

cursor:第一次遍历从0开始
match:默认*
count:默认10

11.3 数据库管理

11.3.1 select-切换数据库

多数据库的使用会让调试和运维不同业务的数据库变得困难,假如有一个慢查询存在,会影响其他数据库,定位问题变得复杂

select db_index

11.3.2 flushdb/flushall-清除数据库

flushdb
flushall

flushdb:清除当前数据库
flushall:清除所有数据库

12 可能存在的错误或警告

WARNING you have Transparent Huge Pages (THP) support enabled in your kernel
Linux透明大页的使用与禁用介绍 - 知乎 (zhihu.com)

WARNING overcommit_memory is set to 0! Background save may fail under low memory condition.
Redis 优化之内存分配控制 vm.overcommit_memory_redis vm.overcommit_memory_富士康质检员张全蛋的博客-CSDN博客

posted @   狎客  阅读(194)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示