Redis基础总结

2022.1.14整理完毕

Redis

NoSQL指的是“not only SQL”,不仅仅是SQL

现在一般统指:一系列非 关系型数据库 MongoDB、redis、HBASE、hiving、es、solr……

这些数据库的特点是:不再使用表做完存储单元,一般都是使用Json这种灵活的类型存储数据

一、安装

1.windows安装

压缩版

直装版

注册为服务

2.Linux安装

3.启动

win压缩版或Linux版启动

redis-server 	# 开启服务 
redis-cli		# 进入数据库,没有密码 

以下操作是为了让Redis开机自启

window注册为服务

redis-server --service-install g://mytools/redis/redis-window-server.conf

Linux

# 修改配置
# 将redis-server.conf 文件中的daemonize修改为yes
vim redis-server.conf 
daemonize yes 

二、配置文件

三、数据类型

Redis中存在5种最基本的数据类型

  1. String
  2. hash
  3. list
  4. set
  5. zset

Redis在后期版本扩展了很多新的特性

range queries
bitmaps
hyperloglogs
geospatial indexes
streams

1.String类型

配合 Ctrl+F 快速搜索定位自己想要的东西

set key value					# 设置一个键值对
get key							# 通过key获取值
mset key value [key value……]	# 设置多个键值对
mget key [key……]				# 通过key获取多个键值对
setex key second value			# 设置一个键值对,同时指定超时时间
setnx key value					# 如果键值对不存在,则增加键值对,如果存在,则没有变化
setrange key offset value		# 从key的值对应的位置开始替换字符串的值
getrange key start end			# 获取[start, end]区间范围内的字符串,如果想要获取全部,可以end设置为-1

incr key						# 对key对应的值加一
decr key						# 对key对应的值减一
incrby key increment			# 对key对应的值加N
decrby key increment			# 对key对应的值减N


=====key操作命令=====

expire key second		# 给已经存在的键值对设置超时时间
ttl key					# 获取key的有效时间,如果为正数,则表示失效的秒数,如果是-1,则表示永久有效,如果是-2,则表示失效(也就是没有个键值对)
keys *					# 查看当前数据库下所有的key
exists key				# 判断某个key是否存在 
type key				# 判断key存储的数据的数据类型
del key					# 删除键值对

set key value

设置一个键值对

127.0.0.1:6379[1]> set name sanshisi
OK
127.0.0.1:6379[1]> keys *
1) "name"

get key

通过key获取值

127.0.0.1:6379[1]> get name
"sanshisi"

mset key value [key value……]

设置多个键值对

127.0.0.1:6379[1]> mset age 16 nickname xiaoyu
OK
127.0.0.1:6379[1]> keys *
1) "age"
2) "name"
3) "nickname"

mget key [key……]

通过key获取多个键值对

127.0.0.1:6379[1]> mget name age nickname
1) "sanshisi"
2) "16"
3) "xiaoyu"

setex key second value

设置一个键值对,同时指定超时时间

127.0.0.1:6379[1]> setex timetest 10 hello
OK
127.0.0.1:6379[1]> ttl timetest # 此处ttl是为了获取key的有效时间
(integer) 5
127.0.0.1:6379[1]> ttl timetest
(integer) -2
127.0.0.1:6379[1]> get timetest
(nil)

setnx key value

如果键值对不存在,则增加键值对,如果存在,则没有变化

127.0.0.1:6379[1]> get  name
"sanshisi"
127.0.0.1:6379[1]> setnx name xiao
(integer) 0
127.0.0.1:6379[1]> get name
"sanshisi"
127.0.0.1:6379[1]> setnx nametwo xiao
(integer) 1
127.0.0.1:6379[1]> get nametwo
"xiao"

setrange key offset value

从key的值对应的位置开始替换字符串的值

127.0.0.1:6379[1]> setrange id 5 hello
(integer) 10
127.0.0.1:6379[1]> get id
"12345hello"

getrange key start end

获取[start, end]区间范围内的字符串,如果想要获取全部,可以end设置为-1

127.0.0.1:6379[1]> set id 1234567890
OK
127.0.0.1:6379[1]> get id
"1234567890"
127.0.0.1:6379[1]> getrange id 0 5
"123456"
127.0.0.1:6379[1]> getrange id 0 -1
"1234567890"

incr key

对key对应的值加一

127.0.0.1:6379[1]> set num 5
OK
127.0.0.1:6379[1]> get num
"5"
127.0.0.1:6379[1]> incr num
(integer) 6
127.0.0.1:6379[1]> get num
"6"
=====可以直接创建
127.0.0.1:6379[1]> incr numincr
(integer) 1
127.0.0.1:6379[1]> get numincr
"1"

decr key

对key对应的值减一

127.0.0.1:6379[1]> decr num
(integer) 5
127.0.0.1:6379[1]> get num
"5"
=====
127.0.0.1:6379[1]> decr numdecr
(integer) -1
127.0.0.1:6379[1]> get numdecr
"-1"

incrby key increment

对key对应的值加N

127.0.0.1:6379[1]> get num
"5"
127.0.0.1:6379[1]> incrby num 5
(integer) 10
127.0.0.1:6379[1]> get num
"10"

decrby key increment

对key对应的值减N

127.0.0.1:6379[1]> decrby num 5
(integer) 5
127.0.0.1:6379[1]> get num
"5"

key操作命令

expire key second

给已经存在的键值对设置超时时间

127.0.0.1:6379[1]> expire id 5 # 此时没有id
(integer) 0
127.0.0.1:6379[1]> set id 123456
OK
127.0.0.1:6379[1]> expire id 8
(integer) 1
127.0.0.1:6379[1]> ttl id
(integer) 2
127.0.0.1:6379[1]> ttl id
(integer) -2

ttl key

获取key的有效时间,如果为正数,则表示失效的秒数,如果是-1,则表示永久有效,如果是-2,则表示失效(也就是没有个键值对)

127.0.0.1:6379[1]> ttl name
(integer) -1
127.0.0.1:6379[1]> ttl id
(integer) -2

keys *

查看当前数据库下所有的key

127.0.0.1:6379[1]> keys *
1) "name"
2) "nametwo"
3) "nickname"
4) "num"
5) "numdecr"

exists key

判断某个key是否存在 (1存在 0不存在)

127.0.0.1:6379[1]> exists id
(integer) 0
127.0.0.1:6379[1]> exists name
(integer) 1

type key

判断key存储的数据的数据类型

127.0.0.1:6379[1]> type name
string

del key

删除键值对

127.0.0.1:6379[1]> del name
(integer) 1
127.0.0.1:6379[1]> get name
(nil)

2.hash类型

hset key field value				# 保存对象的一个属性和属性的值
hget key field 						# 获取对象的属性对应的属性值
hmset key field value [field value]	# 保存对象的多个属性和属性的值
hmget key field [field ……]			# 获取对象的属性对应的属性值
hexists key field					# 判断对象属性是否存在
hdel key field [field]				# 根据属性名称删除属性及值
hkeys key							# 获取所有的属性
hvals key							# 获取所有的值
hgetall key							# 获取所有属性和值
hlen key							# 获取包含属性的个数

hset key field value

保存对象的一个属性和属性的值

127.0.0.1:6379[1]> hset me name yu
(integer) 1

hget key field

获取对象的属性对应的属性值

127.0.0.1:6379[1]> hget me name
"yu"

hmset key field value [field value]

保存对象的多个属性和属性的值

127.0.0.1:6379[1]> hmset me age 20 nickname xiao
OK

hmget key field [field ……]

获取对象的属性对应的属性值

127.0.0.1:6379[1]> hmget me name age nickname
1) "yu"
2) "20"
3) "xiao"

hexists key field

判断对象属性是否存在

127.0.0.1:6379[1]> hexists me id
(integer) 0
127.0.0.1:6379[1]> hexists me name
(integer) 1 # 存在

hdel key field [field]

根据属性名称删除属性及值

127.0.0.1:6379[1]> hdel me nickname
(integer) 1

hkeys key

获取所有的属性

127.0.0.1:6379[1]> hdel me nickname
(integer) 1

hvals key

获取所有的值

127.0.0.1:6379[1]> hvals me
1) "yu"
2) "20"

hgetall key

获取所有属性和值

127.0.0.1:6379[1]> hgetall me
1) "name"
2) "yu"
3) "age"
4) "20"

hlen key

获取包含属性的个数

127.0.0.1:6379[1]> hlen me
(integer) 2

3.list类型

lpush key value [value]					# 列表头部增加多个数据
rpush key value [value]					# 列表尾部增加多个数据
lrange key start end					# 遍历列表
linsert key before|after pivot value	# 在一个元素前/后插入数据
lpop key								# 删除并且获取key对应的list第一个元素
rpop key								# 删除并且获取key对应的list最后一个元素
llen key								# 获取列表的长度
lindex key index						# 获取列表中索引对应的元素
ltrim key start stop					# 获取列表中[start, stop]组成的新的列表

lpush key value [value]

列表头部增加多个数据

127.0.0.1:6379[1]> lpush list 1 2 3
(integer) 3
127.0.0.1:6379[1]> lrange list 0 -1
1) "3"
2) "2"
3) "1"

rpush key value [value]

列表尾部增加多个数据

127.0.0.1:6379[1]> lpush list 5 6 7
(integer) 6
127.0.0.1:6379[1]> lrange list 0 -1
1) "7"
2) "6"
3) "5"
4) "3"
5) "2"
6) "1"

lrange key start end

遍历列表

127.0.0.1:6379[1]> lrange list 0 -1
1) "7"
2) "6"
3) "5"
4) "3"
5) "2"
6) "1"

linsert key before|after pivot value

在一个元素前/后插入数据

127.0.0.1:6379[1]> linsert list after 1 99
(integer) 7
127.0.0.1:6379[1]> linsert list before 1 88
(integer) 8
127.0.0.1:6379[1]> lrange list 0 -1
1) "7"
2) "6"
3) "5"
4) "3"
5) "2"
6) "88"
7) "1"
8) "99"

lpop key

删除并且获取key对应的list第一个元素

127.0.0.1:6379[1]> lpop list
"7"

rpop key

删除并且获取key对应的list最后一个元素

127.0.0.1:6379[1]> rpop list
"99"

llen key

获取列表的长度

127.0.0.1:6379[1]> lrange list 0 -1
1) "6"
2) "5"
3) "3"
4) "2"
5) "88"
6) "1"
127.0.0.1:6379[1]> llen list
(integer) 6

lindex key index

获取列表中索引对应的元素

127.0.0.1:6379[1]> lrange list  0 -1
1) "6"
2) "5"
3) "3"
4) "2"
5) "88"
6) "1"
127.0.0.1:6379[1]> lindex list 2
"3"

ltrim key start stop

获取列表中[start, stop]组成的新的列表

127.0.0.1:6379[1]> lrange list  0 -1
1) "6"
2) "5"
3) "3"
4) "2"
5) "88"
6) "1"
127.0.0.1:6379[1]> ltrim list 2 5
OK
127.0.0.1:6379[1]> lrange list 0 -1
1) "3"
2) "2"
3) "88"
4) "1

4.set类型

sadd key value [value]		# 添加多个数据到key集合中
smembers key				# 获取key集合中所有的数据
sismember key value			# 判断value是否在key集合中存在
scard key					# 获取set的元素个数

sinter key [key]			# 获取多个集合 交集
sdiff key [key]				# 获取多个集合的差集
sunion key [key]			# 获取多个集合的并集

sadd key value [value]

添加多个数据到key集合中

127.0.0.1:6379[1]> sadd stu name
(integer) 1
127.0.0.1:6379[1]> smembers stu
1) "name"
127.0.0.1:6379[1]> sadd stu age address
(integer) 2
127.0.0.1:6379[1]> smembers stu
1) "address"
2) "age"
3) "name"

smembers key

获取key集合中所有的数据

127.0.0.1:6379[1]> smembers stu
1) "address"
2) "age"
3) "name"

sismember key value

判断value是否在key集合中存在

127.0.0.1:6379[1]> sismember stu age
(integer) 1  # 在
127.0.0.1:6379[1]> sismember stu a
(integer) 0

scard key

获取set的元素个数

127.0.0.1:6379[1]> smembers stu
1) "address"
2) "age"
3) "name"
127.0.0.1:6379[1]> scard stu
(integer) 3

sinter key [key]

获取多个集合 交集

127.0.0.1:6379[1]> sadd tea name class score
(integer) 3
127.0.0.1:6379[1]> smembers tea
1) "class"
2) "name"
3) "score"
127.0.0.1:6379[1]>  smembers stu
1) "address"
2) "age"
3) "name"
127.0.0.1:6379[1]> sinter stu tea
1) "name"

sdiff key [key]

获取多个集合的差集

127.0.0.1:6379[1]> sdiff stu tea
1) "age"
2) "address"

sunion key [key]

获取多个集合的并集

127.0.0.1:6379[1]> sunion stu tea
1) "class"
2) "name"
3) "address"
4) "age"
5) "score"

5.zset

 zadd key score value [ score value]	# 添加多个带权重的数据到key集合中
 zrange key start stop					# 获取指定范围中所有的元素
 zcard key								# 返回元素的个数
 zcount key min max						# 返回score值在min和max之间的数据个数
 zscore key 元素							# 返回集合中元素的score值

zadd key score value [ score value]

添加多个带权重的数据到key集合中

127.0.0.1:6379[1]> zadd z1 10 zhao 5 zhang 4 liu 1 san  # 10是权重
(integer) 4

zrange key start stop

获取指定范围中所有的元素

127.0.0.1:6379[1]> zrange z1 0 -1
1) "san"
2) "liu"
3) "zhang"
4) "zhao"

zcard key

返回元素的个数

127.0.0.1:6379[1]> zcard z1
(integer) 4

zcount key min max

返回score值在权重min和max之间的数据个数

127.0.0.1:6379[1]> zcount z1 4 5
(integer) 2

zscore key 元素

返回集合中元素的score值

127.0.0.1:6379[1]> zscore z1 zhao
"10"

6.key的补充命令

keys pattern			# 生产环境下,该命令请慎用  *多位, ? 0或者1位
scann cursor			# 一般在生产环境下,如果要查询所有的键,建议使用这个
persist key				# 将一个存着生命周期的键值对,持久化(永久有效)
select index			# 切换当前所有的数据库
move key index			# 移动键值对到其他数据库
dbsize					# 返回当前数据库保存的数据量
info [section]			# 该命令是查询数据库信息
flushdb					# 清空当前数据
flushall				# 情况数据库管理系统
help					# 帮助文档
help @数据类型			 # 查询某种数据类型下所有命令及相关说明
help 命令				   # 查询该命令的帮助文档
help 指令				   # 查询指令的帮助文档

keys pattern

查找键,生产环境下,该命令请慎用 *多位, ? 0或者1位

scann cursor

一般在生产环境下,如果要查询所有的键,建议使用这个

可以理解为limit,限制匹配到的指令条数,可以进行分页

127.0.0.1:6379[1]> keys *
 1) "numincr"
 2) "nickname"
 3) "nametwo"
 4) "me"
 5) "sc"
 6) "z1"
 7) "tea"
 8) "num"
 9) "age"
10) "numdecr"
11) "list"
12) "stu"
127.0.0.1:6379[1]> scan 0 match * count 5  # 还是有点没搞懂
1) "10"
2) 1) "numincr"
   2) "sc"
   3) "list"
   4) "stu"
   5) "nickname"
   6) "nametwo"
   7) "me"

persist key

将一个存着生命周期的键值对,持久化(永久有效)

127.0.0.1:6379[1]> ttl aa
(integer) -1
127.0.0.1:6379[1]> expire aa 30
(integer) 1
127.0.0.1:6379[1]> ttl aa
(integer) 27
127.0.0.1:6379[1]> ttl aa
(integer) 24
127.0.0.1:6379[1]> persist aa
(integer) 1
127.0.0.1:6379[1]> ttl aa
(integer) -1

select index

切换当前所有的数据库

move key index

移动键值对到其他数据库

127.0.0.1:6379[1]> get aa
"5"
127.0.0.1:6379[1]> select 2
OK
127.0.0.1:6379[2]> keys *
(empty list or set)
127.0.0.1:6379[2]> select 1
OK
127.0.0.1:6379[1]> move aa 2
(integer) 1
127.0.0.1:6379[1]> select 2
OK
127.0.0.1:6379[2]> get aa
"5"

dbsize

返回当前数据库保存的数据量

127.0.0.1:6379[1]> dbsize
(integer) 12	# 12条数据

info [section]

该命令是查询数据库信息

127.0.0.1:6379[1]> info server
# Server
redis_version:3.2.100
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:dd26f1f93c5130ee
redis_mode:standalone
os:Windows
arch_bits:64
…………

flushdb

清空当前数据

127.0.0.1:6379[2]> dbsize
(integer) 1
127.0.0.1:6379[2]> flushdb
OK
127.0.0.1:6379[2]> dbsize
(integer) 0

flushall

清空数据库管理系统

help

帮助文档

help @数据类型

查询某种数据类型下所有命令及相关说明

help 命令

查询该命令的帮助文档

(integer) 0
127.0.0.1:6379[2]> help set

  SET key value [EX seconds] [PX milliseconds] [NX|XX]
  summary: Set the string value of a key
  since: 1.0.0
  group: string

help 指令

查询指令的帮助文档

三、

1.Redis订阅者和发布模式

简单的消息队列,实现进程间的消息传递

订阅频道:subscribe channel [channel……]
向对应的频道推送消息:publish channel message
取消订阅的频道:unsubscribe channel [channel……]

注意:虽然redis可以实现消息队列的作用,但是一般不建议使用redis去做消息队列

消息队列建议使用专门的消息中间件(ActiveMQ、kfaka……)

127.0.0.1:6379[6]> publish newnews 'nihoanihoa'
(integer) 2
==========
127.0.0.1:6379[7]> subscribe newnews
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "newnews"
3) (integer) 1
1) "message"
2) "newnews"
3) "nihoanihoa"
==========
127.0.0.1:6379[8]>  subscribe newnews
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "newnews"
3) (integer) 1
1) "message"
2) "newnews"
3) "nihoanihoa"

2.Redis的高可用(HA)

主从双备:一个主服务器,至少两个及以上从服务器

slaveof < masterip > < masterport >

从服务器需要启动:这个选项配置

slaveof 主服务器的ip地址或者域名 主服务器的端口

使用多进程模拟多台电脑的方式,实现下主从双备

=====redis.windows.conf=====
257#    and resynchronize with them.
258#
259# slaveof <masterip> <masterport>

image-20220114203829322

image-20220114203836935

如果主服务存在密码,则必须启用如下项:

masterauth 主服务器的密码

3.Redis事务

redis的命令都是原子性

redis的事务是不具备原子性的

开启事务

multi 命令

提交事务

exec 命令

回滚事务

discard 命令

watch基于乐观锁的监控

unwatch取消监控

image-20220114205449253

4.Redis持久化

RDB(redis database)快照版

AOF(append only file)
通过日志的形式,将数据变化追加到日志文件中
默认关闭

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值