电子商务网站推广,怎么做电影网站,网页设计与制作课程设计报告小结,wordpress瘦身目录 在ubuntu中下载redis
1. 更新系统包 2. 安装 Redis
3. 启动 Redis 服务
4.设置开机自启
5. 验证 Redis 运行状态
6. 测试 Redis 连接 修改 Redis 配置文件
1. 定位配置文件
2. 备份配置文件#xff08;重要#xff01;#xff09;
3. 编辑配置文件
4. 常见配置…目录 在ubuntu中下载redis
1. 更新系统包 2. 安装 Redis
3. 启动 Redis 服务
4.设置开机自启
5. 验证 Redis 运行状态
6. 测试 Redis 连接 修改 Redis 配置文件
1. 定位配置文件
2. 备份配置文件重要
3. 编辑配置文件
4. 常见配置项修改
(1) 允许远程访问默认仅本地
(2) 设置访问密码
(3) 调整持久化策略
(4) 修改默认端口
(5) 限制内存使用
5. 保存并退出编辑器
6. 重启 Redis 使配置生效
7. 验证配置是否生效
(1) 检查运行状态
(2) 测试密码登录
(3) 检查绑定地址和端口 连接 Redis 服务
十大数据类型
键Key命令
字符串String
列表List
哈希Hash
集合Set
有序集合Zset
位图bitmap
基数统计HyperLogLog
地理空间Geospatial
事务 Watch 监控 在ubuntu中下载redis
1. 更新系统包
sudo apt update 2. 安装 Redis
sudo apt install redis-server -y
3. 启动 Redis 服务
sudo systemctl start redis-server
4.设置开机自启
sudo systemctl enable redis-server
//验证开机自启是否生效
sudo systemctl is-enabled redis-server
若返回 enabled表示开机自启已成功配置
若返回 disabled需重新执行 sudo systemctl enable redis-server 并检查配置文件路径。5. 验证 Redis 运行状态
sudo systemctl status redis-server
//正常会显示 active (running)
6. 测试 Redis 连接
redis-cli ping
//若返回 PONG 表示 Redis 服务正常 修改 Redis 配置文件
1. 定位配置文件
Redis 的默认配置文件路径为
/etc/redis/redis.conf
2. 备份配置文件重要
sudo cp /etc/redis/redis.conf /etc/redis/redis.conf.bak
3. 编辑配置文件
使用 nano 编辑器或其他编辑器如 vim
sudo nano /etc/redis/redis.conf
4. 常见配置项修改
(1) 允许远程访问默认仅本地
# 找到 bind 行修改为bind 0.0.0.0 # 允许所有 IP 访问# 或指定特定 IPbind 127.0.0.1 192.168.1.100 # 允许本地和 192.168.1.100 访问
(2) 设置访问密码
# 找到 # requirepass foobared取消注释并修改密码requirepass your_password
(3) 调整持久化策略
# 默认 RDB 快照配置根据需求调整
save 900 1 # 900 秒15 分钟内至少 1 个键被修改则保存
save 300 10 # 300 秒5 分钟内至少 10 个键被修改
save 60 10000 # 60 秒内至少 10000 个键被修改
(4) 修改默认端口
找到 port 6379修改为其他端口如 8888port 8888
(5) 限制内存使用
# 设置最大内存例如 2GB
maxmemory 2gb# 设置内存满时的淘汰策略
maxmemory-policy allkeys-lru
5. 保存并退出编辑器
nano按 Ctrl O 保存 → 按 Ctrl X 退出。
vim按 Esc → 输入 :wq → 回车。
6. 重启 Redis 使配置生效
sudo systemctl restart redis-server
7. 验证配置是否生效
(1) 检查运行状态
sudo systemctl status redis-server#若状态为 active (running) 表示重启成功
(2) 测试密码登录
redis-cli -a your_password ping # 应返回 PONG
(3) 检查绑定地址和端口
ss -tuln | grep 6379
# 确认 Redis 监听端口和 IP 连接 Redis 服务
若不想每次手动认证可在启动 redis-cli 时通过 -a 参数直接指定密码
redis-cli -a your_password# 进入 Redis 命令行后执行认证127.0.0.1:6379 AUTH your_passwordOK # 返回 OK 表示密码正确 十大数据类型
String 一个字符串value最多是512M是二进制安全的字符串支持序列化List 底层是双向链表List最多可存40亿元素Hash哈希表使用存对象是键值对Set无序集合不能有重复的ZSet有序集合GEO地理空间存储地理位置信息计算2个位置距离HyperLogLog基数统计用来做基数统计的bitmap位图由0和1状态表现二进制bit数组可用于记录一周内是否打卡状态bitfield位域一次性操作多个比特位域Stream流主要用于消息队列支持发布订阅
redis 命令手册https://redis.com.cn/commands.html
键Key命令
# 查
127.0.0.1:6379 keys * # 查看当前库里所有的key
exists key名 # 判断某个key是否存在, 1代表存在0代表不存在
type key名 # 查看你的key是什么类型
expire key名 秒数 # 给key设置过期时间单位描述
ttl key名 # 查看key还有多少秒过期单位秒 -1代表永不过期 -2 代表已过期
# 删除
del key名 # 删除指定的key数据
unlink key名 # 非阻塞删除先keyspace元数据删除没真正的删除会在后续异步中操作不会阻塞的删除
# 对数据库的操作redis默认是有16个数据库的默认是0号库
move key名 dbindex [0-15] # 将当前数据库的key移动到指定的数据库中 例子move key名 3 把key移到3号库
select dbindex [0-15] # 切换数据库[0-15]默认为0例子select 3 切换到3号库
dbsize # 查看当前数据库key的数量相当于SQL的 select count(key)
flushdb # 清空当前库
flushall # 清空16个数据库谨慎使用
# 批量删除 - 通过管道进行批量删除“***” 代表 key前缀
redis-cli -a 密码 keys *** | xargs redis-cli del
字符串String
# 设置值 20秒过期 ex代表以秒为单位设置 px代表以毫秒为单位设置
set key名 value值 ex 20
# 修改key的值如果后面加了keepttl代表保留设置前指定的过期时间只改value值过期时间不重置
set key名 value值 keepttl
# 获得对应的值
get key名
# 同时设置一个或多个键值对
MSET [key1] [value1] [key2] [value2] [key3] [value3]
# 同时获取多个key的值
MGET [key1] [key2] [key3]
# 同时设置一个或多个 key-value 对 必须保证key都不存在才能成功
MSETNX [key1] [value1] [key2] [value2]
# 这个相当于对value值进行截取
GETRANGE [key] 0 -1 # 获取这个key的值的全部
GETRANGE [key] 0 2 # 获取这个key的值索引0到索引2之间的值
# 获取字符串长度和内容相加
STRLEN [key] # 获取key对应的值的长度
APPEND [key] [vale] # 添加字符串内容
# 数值增减value值一定是数字
INCR [key] # 递增数字 1
INCRBY [key] [increment] # 增加指定的整数 increment
DECR [key] # 递减数字 -1
DECRBY [key] [increment] # 减少指定的整数 -increment
# 分布式锁
setnx/setex [key] [过期时间] [value] # 设置带过期时间的key动态设置例子setnx k1值 10 v1值
setnx [key] [value] # 只有在 key 不存在时设置 key 的值。
# 一般是两个命令连用写成lua脚本连用具体在Redis高级分布式锁中使用
# getset(先get再set)
getset [key] [value] # 给定 key 的值设为 value 并返回 key 的旧值
列表List
单个key多个value一般用在栈、队列、消息队列等场景底层是双端链表
lpush [key] [value] ... # 从左边放入元素 例lpush key1 1 2 3 4
Rpush [key] [value] ... # 从右边放入元素
lrange [key] 0 -1 # 从左边开始遍历列表 只能从左边遍历
lpop [key] # 最左边的出栈 也就是lrange遍历的第一个也就是删除掉
rpop [key] # 最右边的出栈 也就是lrange遍历的最后一个
lindex [key] [index] # 通过索引值获取值
llen [key] # 获得元素个数
lrem [key] [num] [value] # 从左往右删除 num个值为 value的值
lrem [key] 0 [value] # 从左往右删除所有值为value的值
ltrim [key] [开始] [结束] # 截取指定范围的值后再赋给[key]也就是删除这个区间外的值
RPOPLPUSH [key1] [key2] # 移除列表的最后一个元素并将该元素添加到另一个列表的第一个并返回
lset [key] [index] [value] # 将key的第 index 个索引值改为value
linsert [key] before/after [value1] [value2] # 在list某个已有值的前后再添加具体
应用场景
用户id收藏了文章1、文章2、文章3 命令lpush likearticle:用户id 文章id1 文章id2 文章id3
查询用户最近收藏3条文章 lrange likearticle:用户id 0 3 0到3条记录
哈希Hash
目前基本不用结构类似MapString,MapObject,Object--keykey,value
hset user id 11 name z1 # 创建一个hash的key
hget user id # 获取key里其中一个值
hlen # 获取在某个key内的全部数量
hexists [key] [k1] # 看key中是否有k1这个键
hkeys [key] # 获取key里面的所有key
hvals [key] # 获取key里面的所有value
集合Set
SADD key member ... # 添加元素 例sadd set1 1 2 3 3 4 **去的数据是1 2 3 4
SMEMBERS key # 遍历集合中所有元素
SISMEMBER key member # 判断元素是否在集合中
SREM key member ... # 删除元素
SCARD key # 获取集合长度
SRANDMEMBER key m # 从set集合里面随机取出m个 如果超过最大数量就全部取出 如果写的值是负数比如-3 表示需要取出3个但是可能会有重复值 不会删除
SPOP key m # 从集合中随即弹出一个元素 出一个删一个
SMOVE key1 key2 在key1里已存在的某个值 # 将key1的已存在的某个值赋给key2
# 集合运算
SDIFF keyA keyB # A - B 属于A但不属于B的元素构成的集合
SUNION keyA keyB # A U B 属于A或者属于B的元素合并后的
SINTER keyA keyB # A ∩ B 属于A同时属于B
SINTERCARD numkeys keyA keyB [LIMIT limit] # 不返回结果集只返回结果的基数
应用场景 微信抽奖 用户1参加抽奖命令sadd key 用户id
显示多少人参加命令SCARD key
进行抽奖命令SRANDMEMBER key 2 随机抽2个人但2人不删除可还可以参与抽奖命令spop key 3 随机抽3人会从集合中删除掉 集合运算 sadd s1 1 2 3 4
sadd s2 3 4 5 6
SDIFF s1 s2 # 求差集 得出 1 2
SDIFF s2 s1 # 求差集 得出 5 6
SINTER s1 s2 # 求交集 得出 3 4
有序集合Zset
有序的集合在set的基础上加了一个score分数值根据分数值排序
ZADD key score member [ score member ] # 添加元素 例zadd k1 60 王者 30 飞车 20 派对
ZRANGE key start stop [WITHSCORES] # 返回元素分数从小到大的顺序 返回索引从start到stop之间的所有元素例ZRANGE k1 0 -1 (全部) 或 ZRANGE k1 0 -1 (全部) withscores 带分数值返回
ZREVRANGE key 0 - 1 [WITHSCORES] # 反序
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] # 获取指定分数范围的元素minmax 不包含 limit是返回限制返回多少个
ZSCORE key member # 获取元素的分数
ZCARD key # 获取集合中元素的数量
ZREM key 某score下对应的value值 # 删除元素
ZINCRBY key increment member # 增加某个元素的分数
ZCOUNT key min max # 获得指定分数范围内的元素个数
ZRANK key values值 # 获得下标值
ZREVRANK key values # 逆序获得下标值、
位图bitmap
由 0 和 1 表示的二进制位的 bit 数组
SETBIT key offset value # 将第offset的值设为value value只能是0或1 offset 从0开始
GETBIT key offset # 获得第offset位的值
STRLEN key # 得出占多少字节 超过8位后自己按照8位一组一byte再扩容
BITCOUNT key # 得出该key里面含有几个1
BITOP and destKey key1 key2 # 对一个或多个 key 求逻辑并并将结果保存到 destkey
BITOP or destKey key1 key2 # 对一个或多个 key 求逻辑或并将结果保存到 destkey
BITOP XOR destKey key1 key2 # 对一个或多个 key 求逻辑异或并将结果保存到 destkey
BITOP NOT destKey key # 对key 求逻辑非并将结果保存到 destkey
应用场景
# 做打卡签到场景
# 第一天打开setbit sign:用户id1:202201 0 1
# 第二天打开setbit sign:用户id1:202202 1 1
# 第三天打开setbit sign:用户id1:202203 2 1
# 第六天打开setbit sign:用户id1:202203 5 1
# 查看第三天有没有来 getbit sign:用户id1:202203 2 # 得出结果是 0
# 查看统计这个月打开几次bitcount sign:用户id1:202203 0 30 # 得出结果是4个数
基数统计HyperLogLog
它本身不会存储元素本身统计某个网站的UV某个文章的UAUA是(独立访客一般是客户端的IP)
pfadd hel 1 3 5 7 # 添加元素 然后统计个数是4
pfadd he2 1 3 3 4 6 7 # 添加元素 然后统计个数是5
pfcount hel # 打印he1个数 结果是 4
pfmerge he新 he1 he1 # 添加元素多个元素
pfcount he新 # 打印he新个数 结果是 6
# 适合做统计个数并不保留结果添加元素添加客户端iP
地理空间Geospatial
用二维的经纬度表示经度范围 (-180, 180]纬度范围 (-90, 90]只要我们确定一个点的经纬度就可以名取得他在地球的位置
geoadd key1 经度1 纬度1 “天安门” 经度2 纬度2 “天安门2” # 添加经纬度坐标
ZRANGE key1 0 -1 # 获取全部的value值
# 如果返回值有中文乱码解决redis -cli -a 123456 – raw 在外部Linux命令行输入
geopos key1 天安门 天安门2 # 返回经纬度
GEOHASH key1 天安门 天安门2 # 返回经纬度坐标的base32编码
GEODIST key1 天安门 故宫 km # 返回两个位置之间的距离km是单位千米 或 m米
GEORADIUS 以给定的经纬度为中心 返回键包含的位置元素当中与中心的距离不超过给定最大距离的所有位置元素
# 例子GEORADIUS key1 114.12 39.2 10 km withcoord withhash count 10 desc
# key (现在的经纬度) 10 (km或m) withcoord会打印hash值withhash返回经纬度坐标count 10返回10条
GEORADIUSBYMEMBER 它这个输入范围元素 例GEORADIUS key1 天安门 10 km ...
事务
Redis是单线程架构在执行事务内的指令不可能执行其他客户端的请求处理它在一组队列中顺序的执行一系列指令
特点没有隔离性的概念、不保证原子性可能一部分成功一部分失败、不能回滚、排他性一个事务依次执行不会被其他指令插入
错误分为编译型代码有问题命令有错事务所有命令都不会执行运行时异常比如1/0如果事务中存在语法性错误那么执行命令时其他命令是可以执行的错误命令抛出异常。
# 开启事务 MULTI
# 执行事务 EXEC
# 放弃事务 DISCARD
# 案例
MULTI # 开启事务
set key1 11 # 添加数据
set key2 22
EXEC # 提交事务
DISCARD #取消事务
nil
# 1 如果中间有语法错误会直接返回结果全部指令逻辑都不会执行
# 2 如果中间有语法没错但没有语法错误指的是get 不存在的值事务会有效会执行有效的指令 Watch 监控
相当于Redis的乐观锁一旦执行了EXEC监控也就会取消.
watch
# 开始进行监控先监控再开启事务保证两key变动在同一事务内如果有其他人先修改了k1会返回nil执行失败比较并交换
# 案例
get k1
watch k1
MULTI # 提交事务
set k1 新值1 # 修改数据
set k2 新值2
get k1
get k2
EXEC # 提交事务
unwatch
# 放弃监控
# 案例
get k1
watch k1
get k2
unwatch
测试多线程修改值使用watch可以当作redis的乐观锁操作
127.0.0.1:6379 watch money # 监视money
OK127.0.0.1:6379 multi
OK
127.0.0.1:6379 decrby money 10
QUEUED
127.0.0.1:6379 incrby out 10
QUEUED
127.0.0.1:6379 exec # 执行之前另外一个线程修改了我们的值就会导致事务提交失败
(nil)