【Redis】狂神说Redis笔记

Redis是一个基于内存的高性能key-value数据库,支持持久化、发布订阅、事务等特性。其特点是单线程、C语言编写,免费开源。主要功能包括内存存储、数据持久化、发布订阅等。Redis提供了多种数据类型如String、List、Set、Hash和Zset,适用于计数器、缓存、地图信息分析等应用场景。此外,还介绍了Jedis客户端的使用以及配置文件的相关设置。
摘要由CSDN通过智能技术生成

概述

RedisRemote Dictionary Server:

  1. 特点:
    1. key-value数据库
    2. C语言
    3. 基于内存
    4. 可以持久化
    5. 免费开源
  2. 功能:
    1. 内存存储:高速
    2. 可持久化:RDB&AOF
    3. 发布订阅系统
    4. 地图信息分析
    5. 计数器、计时器(微信微博浏览量)
  3. 特性
    1. 集群
    2. 事务

基本命令

基础知识

redis-cli # 使用redis-cli连接redis服务
redis-server # 启动服务

ping # ping,成功返回PONG

set key value
get key # 获取key所对应的值
move key database # 移除 database 中的key
expire key time # 设置key的生命周期
ttl key # 查看可用的剩余时间

keys * # 查看所有key,空时返回 (empty list or set)
EXISTS key # 判断key是否存在,存在返回1,不存在返回0
redis-benchmark # 压力测试工具

Redis 是单线程的

Redis基于内存操作,CPU不是性能瓶颈,而内存带宽是瓶颈

数据库

# redis 内置16个数据库
select index # 选择第index个数据库,redis一共有16个数据库,可以在redis.conf中看到
DBSIZE # 查看当前数据库大小
FLUSHDB # 清空当前数据库
FLUSHALL # 清空所有数据库

基本数据类型

五大数据类型

String
APPEND key value # 将value附加到key对应的字符串中,返回字符串的长度 Notice:若可以不存在,等价于set
STRLEN key # 获取字符串的长度

SETEX key expire value # 设置key值为value,expire秒后过期, 若key已存在则覆盖
SETNX key expire value # 设置key值为value,expire秒后过期, 若key已存在则不操作
############################ Interger ###########################################
INCR key # key对应的字符串自增
DECR key # key对应的字符串自减

INCRBY key increment # key对应的字符串自增increment
DECRBY key decrement # key对应的字符串自减decrement

########################### String ###############################################

GETRANGE key start end # 获取key对应字符串[start,end]的字符串
### Notice: GETRANGE key 0 -1 等价于 get key

SETRANGE key offset value # 替换key对应的字符串,从offset开始,值为value

############################### 批量操作 ###########################################

MSET k1 v1 k2 v2 ... # 批量设置 (k1,k2)
MGET k1 k2 k3 # 批量获取 (k1,k2,k3)
MSETNX k1 v1 k2 v2 ... # 批量设置,有一个失败则全部失败 (原子性操作)


################################# 对象 ############################################
set user "{"name":name,"age":age}"# 设置 value 为一个json对象
mset user:name name user:age age # 将key链式表示成对象成员

getset key value # 组合命令: 先get再set

#################################### 应用场景 ###################################
* 计数器
* 统计多单位数量
* 对象缓存 

List

######################################## 增 ########################################
LPUSH key values... # 将values push到 key对应的list的头部中
RPUSH  key values... # 将value push到 key对应的list的尾部中 
LINSERT pivot BEFORE|AFTER value # pivot对应的值前(后)插入value,成功返回长度,失败返回-1

######################################## 查 ########################################
LRANGE key start end # 获取start 到 end的值,负数代表从右往左数
LINDEX key index # 获取list index索引对应的值,同python list一样,负数代表从后往前
LTRIM key start stop # 截取key中start 到 stop中的内容 
LLEN list # 获取list的长度

######################################## 删 ########################################
LPOP key # 移除list左侧元素
RPOP key # 移除list右侧元素
LREM key count value # 删除list中等于value的元素count个,返回实际删除的数量

######################################## 改 ########################################
LSET key index value # 相当于 key[index]=value


######################################## 组合命令 ########################################
RPOPLPUSH list1 list2 将list1的末尾移动到list2的首部

Set

Notice:

  1. Set 中的元素不能重复
######################################## 增 ########################################
SADD key values... # 将values全部加入key中

######################################## 查 ########################################
SMEMBERS key # 获取key的所有成员
SISMEMBER key value # 判断value是否在key中
SCARD key # 获取key中的元素个数

######################################## 删 ########################################
SREM key values... # 移除key中的values成员,返回移除元素的数量
SPOP key [count] # 随机移除key中的count个成员

######################################## 改 ########################################



######################################## 组合命令 ########################################
SMOVE source destination value # 将source的value移动到destination中

######################################## 集合运算 #################################
SDIFF key1 key2 # 计算 key1 与 key2的差集
SINTER key1 key2 # 计算key1 与 key2的交集
SUNION key1 key2 # 计算key1 与 key2的并集

######################################## 其他命令 ########################################
SRANDMEMBER key [count] # 随机输出key中count个成员

Hash

######################################## 增 ########################################
HSET key field value # 相当于key[field]=value

######################################## 查 ########################################
HGET key feild # 相当于get key[feild]
HMGET key feilds... # 获取多个feild的值

HLEN key # 获取key的长度
HEXISTS key feild # 判断key中的feild是否存在

HKEYS key # 相当于python key.keys()
HVALS key # 相当于python key.values()

######################################## 删 ########################################
HDEL key feilds... # 删除feilds中feild的值

######################################## 改 ########################################
HSET key field value # 相当于key[field]=value
HMSET key <field value>... # 多重设置和修改


######################################## 组合命令 ########################################
HINCRBY key feild increment # 相当于python key[feild] += increment, increment 可以为复数
HSETNX key feild value # 若存在则key[feild]=value,若不存在则不操作

Zset

######################################## 增 ########################################
ZADD key <score member>... # 将所有的<score member>添加到key中

######################################## 查 ########################################
ZRANGE key start stop # 查询start stop间key的member
ZREVRANGE key start stop # 查询start stop间key的member,但结果翻转

ZRANGEBYSCORE key min max [WITHSCORES] [limit offset count] # 查询,结果按照min-max排序,若带有WITHSCORE则显示成绩,后面还可以分页查询
ZREVRANGEBYSCORE key min max [WITHSCORES] [limit offset count] # 查询,结果按照min-max排序,若带有WITHSCORE则显示成绩,后面还可以分页查询, 但结果翻转

ZCARD key # 查询key的长度
ZCOUNT key min max # 查询min到max之间的member数

######################################## 删 ########################################
ZREM key member... # 删除key中的所有member

特殊数据类型

geospatial

Notice:

  1. 本质上使用zset,可以使用zset的操作符操作 如使用zrange查看所有member
######################################## 增 ########################################
GEOADD key longitude latitude member # 将经度longitude纬度latitude的member城市添加到key当中

######################################## 查 ########################################
GEOPOS key members... # 获取key中member市(s)的经纬度
GEODIST key member1 member2 [unit] # 获取key中member1和member2之间的距离,以unit的单位返回,默认为米
GEODIST key longitude latitude  radius [unit] # 获取key中,距离(longitude,latitude)radius unit单位的member
GEORADIUSBMEMBER key member  radius [unit] # 获取key中,距离member radius unit单位的所有member
GEOHASH key members... # 返回key中member(s)的hash,本质是将经纬度转化成了hash字符串,但丢失了一定经度

Hyperloglog

Notice:

  1. hyperloglog非常节省内存
  2. 有一定错误率
######################################## 增 ########################################
PFADD key elements... # 插入element(s)
######################################## 查 ########################################
PFCOUNT key # 查询key的长度
######################################## 其他 ########################################
PFMERGE destination sources... # 将source(s)并到destination中 

Bitmap

######################################## 增 ########################################
SETBIT key offset value # key[offset]=value
######################################## 查 ########################################
GETBIT key offset # 查询key[offset]
BITCOUNT key # 查询key中1的个数

事务

Notices:

  1. Redis单条命令保证原子性,但事务不保证原子性
  2. 若发生编译时异常,则事务的所有命令都不会执行
  3. 若发生运行时异常,只有异常命令抛出异常,而正常命令依旧执行
MULTI # 开启事务

命令入队 # redis会返回QUEUED

EXEC # 执行事务
DISCARD # 放弃事务

应用

实现乐观锁

WATCH keys... # 监视key(s)
UNWATCH keys... # 停止监视key(s)

Jedis

发布订阅

SUBSCRIBE channel # 订阅channel,持续接受channel发出的消息

PUBLIC channel message # 在channel上发送message

配置文件

Notices:

  1. 配置文件对大小写不敏感
######################################## 网络配置 ########################################
bind 127.0.0.1 # 绑定的ip
protected-mode yes # 是否受保护
port 6379 # 绑定端口号
######################################## 通用配置 ########################################
daemonize yes # 是否以守护进程运行

pidfile /car/run/redis_6379.pid # pid配置文件

# debug
# verbose, many info, but not a mess like the debug level
# notice
# warning
loglevel notice

logfile "" # 日志文件名,为空则为stdout

database 16 # 数据库数量

always-show-logo yes # 是否显示logo

######################################## 快照 ########################################
save 900 1 # 900内至少有1个key修改则进行持久化操作
save 300 10 # 300内至少有10个key修改则进行持久化操作
save 60 10000

stop-writes-on-bgsave-error yes # 如果持久化出错,是否还要继续工作

rdbcompression yes # 是否要压缩rdb持久化文件

rdbchecksum yes # 保存rdb文件的时候是否校验持久化文件

dir ./ # rdb文件的保存目录

######################################## AOF ########################################
appendonly no # 开启aof模式

appendfilename "appendonly.aof" # 持久化文件名

appendfsync everysec # 每秒同步一次,always:每次修改都同步,no:不同步


######################################## 复制 ########################################

######################################## 限制 ########################################
maxclients 100000 # 最大客户端数量
maxmemory <bytes> # 最大内存配置
maxmemory-policy # 内存到达上限的处理策略 

持久化

RDB

AOF

主从复制

Notice:

  1. 从机不能写,只有主机能写
SLAVEOF ip port # 配置当前redis服务器为ip@port的redis服务器的从机
SLAVEOF no one # 配置当前redis服务器为主机

复制方式

  1. 第一次连接会进行全量同步
  2. 全量同步:slave服务在接受到数据库文件后,将其存盘并加载到内存中
  3. 增量同步:master依次将修改命令传输到slave,完成同步

多层主从复制

哨兵模式

Notices:

  1. 哨兵还需要监视其他哨兵是否正常工作,所以是多哨兵模式

过程:

  1. 哨兵1检测到主服务器不可用,标记为主观下线
  2. 发现的哨兵数量达到一定值后,哨兵之间会进行一次投票,之后将从机升级成主机
  3. 当主机回归,归并到新主机下,成为从机
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pass night

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值