当前位置: 首页 > article >正文

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有序集合,链表操作(有序,可重复)

左->右01234
3322114455
右->左-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有序集合操作(有序, 唯一)

分数1226
数据1001100310041002
下标0123
命令说明
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,

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


http://www.kler.cn/news/306941.html

相关文章:

  • day01 - Java基础语法
  • [Golang] Sync
  • HarmonyOS开发之全局状态管理
  • 天融信把桌面explorer.exe删了,导致开机之后无windows桌面,只能看到鼠标解决方法
  • C++基础面试题 | 什么是C++中的虚继承?
  • LabVIEW机动车动态制动性能校准系统
  • spring项目中如何通过redis的setnx实现互斥锁解决缓存缓存击穿问题
  • [项目][WebServer][HttpServer]详细讲解
  • 一码空传临时网盘PHP源码,支持提取码功能
  • 数据中台进化为数据飞轮的必要
  • 【笔记】自动驾驶预测与决策规划_Part2_基于模型的预测方法
  • 初学Linux(学习笔记)
  • Vue.js入门系列(二十九):深入理解编程式路由导航、路由组件缓存与路由守卫
  • 【C++】入门基础(下)
  • Java项目基于docker 部署配置
  • 关于新版本 tidb dashboard API 调用说明
  • 评价类——熵权法(Entropy Weight Method, EWM),完全客观评价
  • ansible安全优化篇
  • 在深圳停车场我居然能看到很漂亮的瓦房
  • 707. 设计链表
  • SQL,从每组中的 json 字段中提取唯一值
  • 鸿蒙开发基础
  • Rust Web开发框架对比:Warp与Actix-web
  • SpringBoot + MySQL + MyBatis 实操示例教学
  • 从冯唐的成事心法 看SAP协助企业战略落地到信息化
  • 车载软件架构 --- SOA设计与应用(上)
  • DAY20240913 VUE:深入解析 Vue Router 局部路由守卫:路由独享与组件内部守卫的妙用与区别
  • 自修C++PrimerPlus--类型转换、右值引用、引用中的类对象
  • 虹科方案 | 精准零部件测试!多路汽车开关按键功能检测系统
  • C++实现unordered_map和unordered_set