其实深度解析:Redis实战技巧与心得分享的问题并不复杂,但是又很多的朋友都不太了解,因此呢,今天小编就来为大家分享深度解析:Redis实战技巧与心得分享的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!
1.常用命令
contains key #检查key是否存在
type key # 获取key保存的value类型
ttl key # 获取key的剩余过期时间
expire key times #设置key的过期时间,单位为秒
expireat key timestamp #设置key的过期时间为时间戳的秒值
del key1 key2 . # 删除多个key并返回删除的key的数量
keys key* # 返回所有匹配的键,性能极差,不宜在生产环境中使用
2.Strings操作命令
set key "test" # 添加键值,永不过期
set key "test" 10 # 有效期10s
strlen key # 获取value的字符长度
set key "test" NX EX 10 # 当key不存在时,添加,有效期10s;该命令可用于开发分布式锁
incr key # 对于数字类型,该命令会加一。如果是非数字类型,则会返回错误。
decr key # 对于数字类型,此命令减一。如果是非数字类型,则会返回错误。
mset key1 value1 key2 value2 # mset 是一个原子操作。它一次批量设置多个键值。与普通的设置操作一样,现有的键将被覆盖。
msetnx key4 value4 key1 value1 # msetnx 当任何设置的键已经存在时,操作将失败,并且不会保存任何键值。
3.Hash操作命令
hset key field value #设置key中的field-value键值是的,要设置hash数据的过期日期,可以使用expire命令
hget key field # 获取指定key下的field对应的值
hkeys key # 返回指定key包含的所有字段
hvals key # 返回指定key中包含的所有值
hlen key # 返回某个key下的字段个数
hmset key field1 value1 field2 value2 # 批量设置多个key-value
hmget key field1 field2 # 批量获取多个key的值
hgetall key # 返回key包含的键和值数组
hexists key field # 检查某个字段是否存在
hdel key field #删除key中指定的字段。如果是最后一个字段,则整个key被删除
4.List操作命令
lpush key value1 value2 #从左边入队多个值
lpushx key value1 # 只有当key存在时,value才会从左开始排队
rpush key value1 value2 #从右边入队多个值
rpushx key value1 #只有key存在时,才让value从右边进入队列
lrange key start end # 从左到右查询列表中从start到end(包括end)有下标的元素。索引下标从左到右为0到N,从右到左为-(N+1)到-1。lrange key 0 -1表示查询所有元素;该操作不会从列表中删除查询的元素。
llen key # 获取key中所有值的个数
lset key index newValue # 修改列表中指定下标的元素
lindex key索引# 获取指定下标的值
lpop key # 从列表左侧弹出元素,并将弹出的元素从列表中移除
rpop key # 从列表右侧弹出元素,并将弹出的元素从列表中移除
lrem 键计数值# 删除|count|元素数量等于值。如果count0,则从head-tail中删除;如果count0,则从tail-head中删除;如果count=0,则删除所有等于value的元素。的元素
blpop key key1 timeout # 阻塞方法返回列表中第一个非空的头元素。返回值是一个包含列表名称和元素的数组。
brpop key key1 timeout # 阻塞方法返回列表中第一个非空的尾部元素。返回值是一个数组,包含列表名称,元素
5.Set操作命令
Sadd key value value1 # 添加值
scard key # 返回key中的元素个数
smembers key #返回key中的所有元素
sismember key element # 判断该元素是否在Set中
srandmember key [count] # 从Set 中随机返回count 个元素。如果不指定count,则默认返回1个元素,并且不会移除该元素。
spop key # 从Set中随机弹出一个元素并移除弹出的元素
smembers key # 获取所有元素
sinter [key …] # 查找多个Set 的交集
sunion [key …] # 求多个Set的并集
sdiff [key …] # 求多个Set的差异集。 key1和key2的差分集结果就是key3的差分集,以此类推。
sinterstore destination [key …] # 将多个Set的交集保存到destination
sunionstore destination [key …] # 将多个Set的并集保存到destination
sdiffstore target [key …] # 将多个Set的差异保存到destination。使用场景:
Set 类型提供集合的交集、并集和差集运算。更适合的场景是tag。
例如,为用户添加标签,通过交集可以找到用户的共同标签;
通过将用户添加到标签中,可以通过交集找到具有共同标签的用户。
6.Server命令
info #查看当前redis服务器运行信息
dbsize # 返回当前db中保存的key的数量
select x #切换db,不存在的db会自动创建。如果项目中切换db,则需要重建连接。
client list # 查看客户端相关数据,可以通过这个来判断当前连接使用的是哪个db
swapdb 0 1 # 两个db之间转换数据并立即生效
lushdb # 清除当前db的所有key-values
lushall # 清除所有db的所有Key-values
7.Eval执行Lua脚本
1.直接执行lua函数
eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 第一第二个描述:
1).eval命令参数
第一个参数是脚本内容,第二个是KEYS的数量n,后面的n个参数都是KEYS的剩余部分。你可以使用ARGV来获取它。 2) .eval命令注意事项
eval中的KEYS和ARGV区分大小写,必须全部大写。
2.执行lua script
redis-cli --eval /Users/apple/Redis-lua/dslock.lua dslock,真实描述:
如果直接执行脚本,KEYS和ARVGV需要用逗号分隔。
3.使用RedisTemplate执行lua脚本:
长结果=redisTemplate.execute(
(RedisConnection连接)-connection.eval(
"脚本".getBytes(),
返回类型.INTEGER,
1、
"key".getBytes(),
"值".getBytes()));注意java类型和redis类型的对应关系如下:
/**
* @param javaType 可以是{@literal null},它转换为{@link ReturnType#STATUS}。
* @return 永远不会{@literal null}。
*/
公共静态ReturnType fromJavaType(@Nullable Class?javaType) {
if (javaType==null) {
返回ReturnType.STATUS;
}
if (javaType.isAssignableFrom(List.class)) {
返回ReturnType.MULTI;
}
if (javaType.isAssignableFrom(Boolean.class)) {
返回ReturnType.BOOLEAN;
}
if (javaType.isAssignableFrom(Long.class)) {
返回ReturnType.INTEGER;
}
返回ReturnType.VALUE;
}
8.使用注意
Redis默认的最大连接数为10000,但是受到Linux系统最大连接数的限制。在Linux 中,可以使用ulimit -a 查看打开文件的大小。
具体修改Linux命令中的最大连接数:
$ vim /etc/security/limits.conf # 添加以下字段
* 软诺文件65535
*硬nofile 65535
*软nproc 65535
*硬nproc 65535
$ vim /etc/pam.d/login # 添加以下字段
好了,文章到这里就结束啦,如果本次分享的深度解析:Redis实战技巧与心得分享和问题对您有所帮助,还望关注下本站哦!
【深度解析:Redis实战技巧与心得分享】相关文章:
用户评论
最近在学习 Redis,好用是真的好用!
有9位网友表示赞同!
感觉 Redis 很强大啊,各种缓存都能轻松搞定。
有16位网友表示赞同!
想了解一下你用的 Redis 用场景?可以分享一下经验吗?
有10位网友表示赞同!
Redis 的性能 really fast!
有5位网友表示赞同!
学习 Redis 的资料挺多的吧,哪种教学资源比较好?
有16位网友表示赞同!
我主要是用 Redis 做 session 存储,感觉效果不错。
有8位网友表示赞同!
缓存的技巧很多,有空可以互相交流下经验!
有18位网友表示赞同!
Redis 作为一个 key-value 数据库,真的挺实用的。
有16位网友表示赞同!
记录的使用心得真不错,方便大家了解 Redis 的应用场景。
有16位网友表示赞同!
对于初学者来说,入门 Redis 不容易吗?
有5位网友表示赞同!
有什么 Redis 的最佳实践可以分享吗?
有9位网友表示赞同!
Redis 的分布式存储也是一个很重要的特性吧。
有19位网友表示赞同!
我想要了解更多关于 Redis 性能优化的方法!
有6位网友表示赞同!
记录的使用心得真是太棒了,希望能看到更多精彩内容!
有6位网友表示赞同!
想了解一下你对 Redis 的未来发展趋势有什么看法?
有11位网友表示赞同!
Redis 的安全性如何保证?有需要注意的地方吗?
有11位网友表示赞同!
有没有推荐一些好的 Redis 工具?可以提高工作效率。
有15位网友表示赞同!
Redis 还可以使用在哪些方面呢?有什么建议吗?
有9位网友表示赞同!
期待看到更多关于 Redis 使用心得的分享!
有17位网友表示赞同!
学习 Redis 的时候遇到什么困难?有解决办法吗?
有8位网友表示赞同!
记录的使用心得,真是一份宝贵的财富!
有18位网友表示赞同!