缓存(数据查询、短连接、新闻内容、商品内容等等)(最多使用)
聊天室的在线好友列表
任务队列(秒杀、抢购、12306等等)
应用排行榜
网站访问统计
数据过期处理(可以精确到毫)
分布式集群架构中的session分离
见:CentOS安装Redis
默认使用 6379 端口,Linux环境需要开启这个端口
启动
前端模式启动
后端启动(建议)
停止
杀死redis进程
或者
结束redis cli 客户端
使用
连接远程Redis的方式
redis-cli -h IP地址 -p 端口号
这五种数据结构可以参考Redis数据结构图
String 键值对
Hash value是一个Hash
List 有序不唯一 遍历效率高
Set 无序唯一,可以过滤重复数据,增删效率高
SortedSet 与Set相同,唯一区别,这个是有序的
keys * 查询所有
适用场景:
存
set key value
取
get key
getset key value
删
del key
数值增减
incr key
decr key
incrby key increment
例:
get num
结果:5
incrby num 2
结果:7
decrby key decrement
拼凑字符串
注:append的作用是进行字符串的拼接,并且返回字符串的长度
get str
结果:he
append str lele
结果:6
get str
结果:helele
适用场景:
添加
hset key field value
hmset key field value field2 value2 ...
查询
hget key field
hmget key field field2 ...
hkeys key
hvals key
hgetall key
删除
hdel key field field2 ...
del key
增加数字
hincrby key field increment
例如:
hget myhash age
结果:20
hincrby myhash age 5
结果:25
其它
hexists key field
hlen key 获取key所包含的field的数量
两端添加
lpush key field [fieldN ...]
这里的l代表left,数据的头
lpush key a b c
rpush key field [fieldN ...]
这里的r代表right,数据的末尾
rpush key 1 2 3
扩展:
lpushx key value
当指定的key存在时,向关联的list头部插入value。如果不存在,将不进行插入
rpushx key value
查看列表
lrange key start end
注:
从开头到末尾:第一条数据用0来表示
从末尾到开头:第一条数据用-1来表示
即:0表示第一条数据,-1表示最后一条数据
例如:查询所有
lrange mylist 0 -1
两端弹出
lpop key
返回并弹出指定的key关联的链表中的第一个元素。如果key不存在,返回nil;
rpop key
从尾部弹出元素
获取列表中元素个数
llen key
其它
删除
lrem key count value
删除count个值为value的元素。
如果count大于0,那么从头向尾遍历并删除count个值为value的元素;
如果count小于0,那么从尾向头遍历并删除count个值为value的元素;
如果count等于0,那么删除链表中所有等于value的元素。
插入
lset key index value
在指定的索引下标处插入元素
linsert key before|after pivot value
在第一个pivot元素之前|之后插入value这个元素
尾部元素弹出添加到头部
rpoplpush resource destination
例:
lpush list1 1 2 3
结果:3 2 1
lpush list2 a b c
结果:c b a
rpoplpush list1 list1
结果:1
lrange list1 0 -1
结果:1 3 2
rpoplpush list2 list1
结果:a
lrange list1 0 -1
结果:a 1 3 2
使用场景:
rpoplpush的使用场景:
Redis链表经常会被用于消息队列的服务,以完成多程序之间的消息交换。
可以参照文档 5.4.4
Set 元素无序、不能重复
增
sadd key value [valueN ...]
向set中添加元素,如果该key的值已经存在,那么不会重复添加
查
smembers key
获取set中所有成员
删
srem key member [memberN ...]
删除set中指定的成员
判断数据在set中是否存在
sismember key member
判断指定的成员在set中是否存在,1表示存在,0 表示不存在。
(无论集合中有多少元素都可以极速的返回结果)
集合运算命令可以参考文档
sdiff key [key...]
差集
sinter key [key...]
交集
sunion key [key...]
并集
有顺序不能重复
增
zadd key index value [index value ...]
或者
zadd key score member [score member ...]
此方法存在替换分数、或者 修改分数
例:
zadd mysort 10 zhangsan 20 lisi 30 wangwu
结果:3
zrange mysort 0 -1
结果:zhangsan lisi wangwu
zadd mysort 40 zhangsan
结果:0
zrange mysort 0 -1
结果:lisi wangwu zhangsan
查
获得元素
score key member
返回指定成员的分数
zcard key
获取集合中的成员数量
范围查询
zrange key start end [withscores]
正序――查询[分数]成员
zrevrange key start end [withscores]
倒序――查询[分数]成员
删
zrem key member [member ...]
移除集合中指定的成员,可以指定多个成员
zremrangebyrank key start stop
按照排名范围删除元素
zremrangebyscore key min max
按照分数范围删除元素
扩展命令见文档
keys pattern
del key key2...
exists key 1存在,0不存在
rename key newkey
expire key second 设置过期时间,单位秒
ttl key 获取key所剩的超时时间,如果没有设置超时,返回-1;-2表示超时不存在。
Persist key 清除key的过期时间,key持久化
type key 获取key的类型,key不存在返回none
一个Redis实例最多可以提供16个数据库,下标从0-15,客户端默认连接第0号数据库,也可以通过select选择连接哪个数据库。
select 1
move newkey 1
将当前库的key移植到1号库中
服务器命令
ping 测试连接是否存活
quit 退出连接
dbsize 返回当前数据库中key的数目
info 获取服务器的信息和统计
flushdb 删除当前选择数据库中的所有key
flushall 删除所有数据库中的所有key
stringRedisTemplate.opsForValue().set("test", "100",60*10,TimeUnit.SECONDS);//向redis里存入数据和设置缓存时间
stringRedisTemplate.opsForValue().get("test")//根据key获取缓存中的val
stringRedisTemplate.boundValueOps("test").increment(-1);//val做-1操作
stringRedisTemplate.boundValueOps("test").increment(1);//val +1
stringRedisTemplate.getExpire("test")//根据key获取过期时间
stringRedisTemplate.getExpire("test",TimeUnit.SECONDS)//根据key获取过期时间并换算成指定单位
stringRedisTemplate.delete("test");//根据key删除缓存
stringRedisTemplate.hasKey("546545");//检查key是否存在,返回boolean值
stringRedisTemplate.expire("red_123",1000 , TimeUnit.MILLISECONDS);//设置过期时间
stringRedisTemplate.opsForSet().add("red_123", "1","2","3");//向指定key中存放set集合
stringRedisTemplate.opsForSet().isMember("red_123", "1")//根据key查看集合中是否存在指定数据
stringRedisTemplate.opsForSet().members("red_123");//根据key获取set集合
更多命令可以参考Redis中文网 —— Redis命令API