Redis基础,常用操作命令,主从复制,一主两从,事务数据库操作

redis当中默认有16个数据库,分别为db0,db1,db2.......

命令 说明
select N 选择数据库
flushdb 删除当前数据库中的所有数据
flushall 删除所有数据库中的数据
dbsize 查看数据库中的数据量

选择数据库

select 1-15

删除当前数据库重的所有数据

flushdb

删除所有数据库中的数据(谨慎使用)

flushall

查看数据库中的数据量

dbsize

keys键操作

通配符

  • ? :匹配一个字符

  • * :匹配任意个(包括0个)字符

  • [] :匹配括号间的任一个字符,可以使用 "-" 符号表示一个范围,如 a[b-d] 可以匹配 "ab","ac","ad"

  • \x :匹配字符x,用于转义符号,如果要匹配 "?" 就需要使用 \?

命令 说明
exists key 测试指定key是否存在
del key1 key2....keyN 删除指定key
type key 返回指定key的value类型
keys pattern 返回指定模式的所有key
rename oldkey newkey 改名字
dbsize 返回当前数据路的key数量
expire key seconds 为key指定过期时间
ttl key 返回key的过期剩余秒数
select db-index 选择数据库
move key db-index 把key从当前数据库移动到指定数据库

删除key值

del aaa bbb ccc

设置key指定过期时间

expire key seconds

查看key过期时间

ttl key

key的过期时间为-1是永久存在的,但是一旦给值设置了过期时间后,最后都会变成-2,然后永久消失

数据类型

Redis的五大类型主要包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set),每种类型都有其独特的功能和使用场景

String类型操作

命令 说明
set key value 设置key对应值为string类型的value
setex key seconds value 设置key对应值为string类型的value,增加到期时间
mset key1 value1...keyN valueN 一次设置多个key的值
mget key1 ...keyN 一次获取多个key的值
incr key 对key的值++操作,并返回新值
decr key 同上,但是做的是--操作
incrby key integer 同incr,加指定值
decrby key integer 同desr,减指定值
incrbyfloat key increment 对key的值增加一个浮点数
append key value 给指定key的字符串追加value
substr key start end 返回截取过的key的字符串值
getrange key start end 获取存储在key上的值的一个子字符串
setrange key offset value 将从start偏移量开始的子串设置指定的值

设置值

set aaa nihao

取值

get aaa

设多值

mset k1 v1 k2 v2 k3 v3 

取多值

mget k1 k2 k3

自增1

incr aaa

自减1

decr aaa

自己设置大小

incrby/decrby aaa 10

设置一个有过期时间的key

setex bbb 5 nihao

list有序集合,链表操作(有序,可重复)

左->右 0 1 2 3 4
33 22 11 44 55
右->左 -5 -4 -3 -2 -1
命令 说明
lpush key string 在key对应list的头部添加字符串元素
rpop key 在list的尾部删除元素,并返回删除元素
rpush key string
lpop key
lpush key string
llen key 返回对应list的长度
lrange key start end 返回指定区间内的元素,从下表0开始
ltrim key start end 截取list, 保留指定区间内元素
lindex key 下标 获取列表下标对应的指定元素
blpop key[key...] time out 删除,并获得该列的第一元素,或阻塞,直到有一个可用
brpop key[key...] time out 删除,并获得该列的最后一个元素,或阻塞,直到有一个可用
rpoplpush source destination 删除列表中的最后一个元素,将其追加到另一个列表
brpoplpush source destination timeout 弹出一个列表的值,将他推到另一个列表,并返回他,直到有一个可用

因为list的值是从左开始列的,所以当第二个值过来时,第一个就到右边了,就像反着

创建集合,设置值

lpush list1 1
lpush list1 2
lpush list1 3

取值

0代表第一个,-1代表最后一个,所以可以获取

lrange list1 0 -1

删除集合左边的第一个元素 并返回值这个值

Lpop key

查看key的长度

llen list

查看下标

Lindex list 0

set集合操作(无序,唯一)

命令 说明
sadd key member 添加一个string元素到key对应的set集合中
srem key member 从key对应set中移除给定元素
smove p1 p2 member 从p1对应set中移除给定元素并添加到p2对应set中
scard key 返回set的元素个数
sismember key member 判断member是否在set中
sinter key p1 p2...pN 返回所有给定key的交集
sunion key p1 p2...pN 返回所有给定key的并集
sdiff key p1 p2...pN 返回所有给定key 的差集
smembers key 返回key对应set的所有元素,结果是无序的
sinterstore destination key [key....] 获取两个集合的交集,并存储在一个关键的结果集
sunionstore destination key [key...] 合并set集合,并将结果存入新的set里面
sdifferstore destination key[key...] 获取队列的差集,并存储在一个新的结果集
srandmember key [count] 从集合中随机获取一个key
spop key[count] 删除并取得一个集合里面的元素
smove source destination member 移动集合里的一个key到另一个集合

添加

Sadd set nihaoa

返回所有的值

Smembers set

返回个数

scard set

sorted set有序集合操作(有序, 唯一)

分数 1 2 2 6
数据 1001 1003 1004 1002
下标 0 1 2 3
命令 说明
zadd key score member 添加元素到集合,元素在集集合中存在则更新应对的score
zrem key member 删除指定元素
zcount key min max 返回分数范围内的成员变量
zincrby key incr member 按照incr幅度增加对应member的score值,返回score值
zrank key member 返回指定元素在集合中的排名(下标),集合中元素是按score从小到大排序的
zrevrank key member 集合中元素是按score从大到小排序的
zrange key start end 从集合中选择指定区间的元素,返回的是有序集合
zrevrange key start end 同上,返回结果是按score逆序的
zcard key 返回集合中元素的个数
zscore key member 返回给定元素对应的score
zremrangebyrank key min max 删除集合中排名在给定区间的元素
zinterstore distination numkeys 相交多个结果集,导致排序的设置存储在一个新的结果集
zunionstore destination numberkeys 添加多个排序集合导致排序的设置存储在一个新的结果集,可以实现取得最大值(max),取得最小值(min)

设置key

zadd zset 1 1 2 2 3 3 4 4 5 5 

从集合中选择指定区间的元素,返回的是有序集合

Zrange zset 0 -1

反向输出

zrevrange zset 0 -1

hash散列操作

命令 说明
hdel key field... 删除一个或多个hash的field
hexists key field 判断field是否存在hash中
hget key field 获取hash中field的值
hgetall key 从hash中读取全部的域和值
hincrby key field increment 将hash中指定域的值增加给定的值
hincrbyfloat key field increment 将hash中指定域的值增加给定的浮点数
hkeys key 获取hash 中所有field
hlen key 获取hash中所有字段的数量
hmget key field[field...] 获取hash里面指定字段的值
hmset key field[field...] 设置hash字段值
hset key field value 设置hash里面一个字段的值
hsetnx key field value 设置hash的一个字段,只有这个字段不存在是有效
hstrlen key field 获取hash里面指定field的长度
hvals key 获取hash的所有值
hscan key cursor 迭代hash里面的元素

存值

hset hash name cxy
hset hash age 19
hset hash money 200

hmset hash1 name cxy age 19 money 200

取值

hget hash name

hmget hash name age money

长度

Hlen key

事务

Redis事务是指将多条命令加入队列,一次批量执行多条命令,每条命令会按顺序执行,事务执行过程中不会受客户端传入的命令请求影响。

总结说:Redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。

Redis事务和关系型数据库的事务不太一样,它不保证原子性,也没有隔离级别的概念。

Redis事务没有隔离级别的概念批量操作在发送 EXEC 命令前被放入队列缓存,并不会被实际执行,也就不存在事务内的查询要看到事务里的更新,事务外查询不能看到。Redis不保证原子性Redis中,单条命令是原子性执行的,但事务不保证原子性,且没有回滚。事务中任意命令执行失败,其余的命令仍会被执行。一个事务从开始到执行会经历以下三个阶段:

第一阶段:开始事务第二阶段:命令入队第三阶段、执行事务。Redis事务的相关命令如下:

MULTI:标识一个事务的开启,即开启事务;EXEC:执行事务中的所有命令,即提交;DISCARD:放弃事务;和回滚不一样,Redis事务不支持回滚。WATCH:监视Key改变,用于实现乐观锁。如果监视的Key的值改变,事务最终会执行失败。UNWATCH:放弃监视。

multi

multi:开启事务 exec :结束

当我们开启事务后,输入命令都会返回出一个QUEUED 当我们输入完后,结束输入exec,他就会一个一个将我们输入的命令结果展现出来

运行错误:但是如果有错误的,还是会显示错误,但是对的命令就会执行,错的就不会执行

编译错误:开启事务之后,我们输入命令不是简单的错误而是关键字打错等错误,就会出现这种情况,输入exec开启事务之后的所有命令都不会执行

watch

监听,watch可以监听我们的key,然后展现出key是否会变动

比如我们监听一个苹果,我们的眼睛看到了苹果然后伸出手,最后拿到了苹果咬了一口,这个是没问题的(也就是数据一直在我们的视觉和触觉下,没有一点变动)

比如我们监听一个苹果,我们的眼睛看到了苹果,但是在伸手之前看到旁边的人伸手并且拿到了苹果,别人也碰到过了(也就是数据在拿到我们手里之前,被变动了,所以会返回nil)

redis配置一主双从

一主双从

我们需要准备三个配置文件,也就是复制原来我们安装过的redis的.conf文件,复制三份到某一个文件夹,redis6380.conf、redis6381.conf、redis6382.conf

复制

cp /opt/redis/redisserver/bin/redis.conf /opt/redis/redisserver/bin/rediszc/redis6380.conf
cp /opt/redis/redisserver/bin/redis.conf /opt/redis/redisserver/bin/rediszc/redis6381.conf
cp /opt/redis/redisserver/bin/redis.conf /opt/redis/redisserver/bin/rediszc/redis6382.conf

复制三份后进入配置文件

将三个文件里原来的6379,全改为我们要设置的6380,81,82,密码全部注释掉,允许后台启动

找到密码的位置

在前面加上#注释掉密码

将这个no改为yes,允许后台启动

启动三个redis,启动时后面加上我们的配置类

./redis-server ../rediszc/redis6382.conf 

进入redis的两个从进行配置

62和61是一样的操作

切换到6380里,也就是主

查看

可以看到slaves为2,里面有slave0和slave1,

测试,在主机两面增加两个值,看从机会不会也添加

相关推荐
litGrey7 分钟前
Maven国内镜像(四种)
java·数据库·maven
huaqianzkh1 小时前
了解MySQL 高可用架构:主从备份
数据库·mysql·架构
向往风的男子2 小时前
【mysql】mysql之读写分离以及分库分表
数据库·mysql
阳光开朗_大男孩儿3 小时前
DBUS属性原理
linux·服务器·前端·数据库·qt
挠背小能手3 小时前
达梦数据库SCHEMA使用初探
数据库·oracle
楠神说软件测试3 小时前
接口自动化框架入门(requests+pytest)
运维·数据库·自动化
惟长堤一痕3 小时前
医学数据分析实训 项目一 医学数据采集
数据库
xuan哈哈哈3 小时前
web基础—dvwa靶场(八)SQL Injection(Blind)
数据库·web安全·网络安全
Lill_bin3 小时前
Lua编程语言简介与应用
开发语言·数据库·缓存·设计模式·性能优化·lua
终末圆4 小时前
MyBatis动态SQL中的`if`标签使用【后端 19】
java·数据结构·数据库·sql·算法·spring·mybatis