Redis 日常操作
常见问题:1、Redis中删除过期Key的三种策略,原理2、利用Redis构建集群3、Redis事务管理4、发布与订阅5、Redis连接数一直比较高目录基本操作全局命令redis数据类型及操作发布订阅spring提供的API分布式锁主从复制参考文档基本操作# 启动 安装完Redis后执行以下命令启动redis,/usr/local...
常见问题:
1、Redis中删除过期Key的三种策略,原理
2、利用Redis构建集群
3、Redis事务管理
4、发布与订阅
5、Redis连接数一直比较高
6、redis的配置文件可以通过info命令下面的config_file获得
目录
文章目录
基本操作
# 启动 安装完Redis后执行以下命令启动redis,/usr/local/etc/redis.conf配置文件文件路径
redis-server /usr/local/etc/redis.conf
# 客户端连接服务器
redis-cli -h 192.168.2.252 -p 6379
# 查看redis的版本
redis-cli -v
# 如果设置了登陆密码
auth password
- shutdown 关闭Redis服务器
$src/redis-cli
redis 127.0.0.1:6379> shutdown
全局命令
参考地址
http://redisdoc.com/index.html
- 键操作
# 查看所有键
keys *
# 键总数
dbsize
# 检查键是否存在,1是存在,0是不存在
exists key
# 返回 key 所关联的字符串值,如果 key 不存在那么返回特殊值 nil 。
get key
# 删除键,删除给定的一个或多个 key ,不存在的 key 会被忽略。
del key [ key ... ]
# 过期键
expire key seconds
# 键的数据类型
type key
- 服务器管理
# 测试服务器是否联通
ping
echo
# 选择一个数据库
select 1
# 退出当前客户端进程
quit
# 列出全部参数
info
# 只列出内存相关部分
info info memory
# 列出客户端
client list
# 命令监控
monitor
# 清除当前数据库中的数据,默认是0号数据库
flushdb
# 清除所有数据库的数据
flushshall
- 系统参数的配置
# config 查询
config get dir
config get *
# 配置连接过期自动清除时间
config set timeout 30
# 将配置写入到redis.conf
config rewrite
redis数据类型及操作
string
# 设置一个值
set mykey somevalue
# 查
get mykey
# 给key设置一个新值value,同时返回上一个值
getset count 2
list类型及操作
lpush list 'word'
lrange list
hash
# 获得值
hget key field
# 计算field的个数
hlen key
# 获得所有的field
hkeys key
事务
# 开启事务
multi
# 提交
exec
# 取消
discard
set的操作
# 添加
sadd myset "woeu"
# 查看
smembers myset
# 指定删除
srem myset woeu
# 随机删除,并返回删除元素
spop myset
# 返回一个与第一个交集的差集
sdiff myset1 myset2
# myset1与myset2的差集存储到myset4
sdiffstore myset4 myset1 myset2
setnx
更多命令可查看:
https://blog.csdn.net/chenlushun12/article/details/79356989
发布订阅
# 向channel发布message1
publish channel message1
# 订阅消息
subscribe channel
# 取消订阅
unsubscribe channel
spring 提供的API
//向redis里存入数据和设置缓存时间
stringRedisTemplate.opsForValue().set("test", "100",60*10,TimeUnit.SECONDS);
//val做-1操作
stringRedisTemplate.boundValueOps("test").increment(-1);
//根据key获取缓存中的val
stringRedisTemplate.opsForValue().get("test");
//val +1
stringRedisTemplate.boundValueOps("test").increment(1);
//根据key获取过期时间
stringRedisTemplate.getExpire("test");
//根据key获取过期时间并换算成指定单位
stringRedisTemplate.getExpire("test",TimeUnit.SECONDS);
//根据key删除缓存
stringRedisTemplate.delete("test");
//检查key是否存在,返回boolean值
stringRedisTemplate.hasKey("546545");
//向指定key中存放set集合
stringRedisTemplate.opsForSet().add("red_123", "1","2","3");
//设置过期时间
stringRedisTemplate.expire("red_123",1000 , TimeUnit.MILLISECONDS);
//根据key查看集合中是否存在指定数据
stringRedisTemplate.opsForSet().isMember("red_123", "1");
//根据key获取set集合
stringRedisTemplate.opsForSet().members("red_123");
分布式锁
先看几个命令:
setnx key value
当且仅当 key 不存在,将 key 的值设为 value ,并返回1;若给定的 key 已经存在,则 SETNX 不做任何动作,并返回0。
getset key value
将给定 key 的值设为 value ,并返回 key 的旧值 (old value),当 key 存在但不是字符串类型时,返回一个错误,当key不存在时,返回nil。
主从复制
# 建立复制
127.0.0.1:6379> slaveof 192.168.10.151 7777
OK
# 断开复制
127.0.0.1:6379> slaveof no one
OK
slave连上去,master会生成一个rdb文件,slave进行重演。
复制的过程当中,如果数据比较大,比如有40GB的数据,就会很慢,可能需要30、40s不能提供服务。这种情况我们是不能接受的。
集群
参考文档
http://redisdoc.com/index.html
redis配置参数博客
更多推荐
所有评论(0)