由于项目中经常会使用Redis作为缓存,所以,在此记录Redis的日常使用操作与基础命令
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
redis官网: https://redis.io
redis中文网: http://www.redis.net.cn (对于英文不好的同学)
数据结构包括: 字符串,哈希,列表,集合,有序集合还有发布订阅等
1. 字符串
string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个键最大能存储512MB。
redis 127.0.0.1:6379> SET name "redis.net.cn" OK redis 127.0.0.1:6379> GET name "redis.net.cn"
命令:
set key value
2. 哈希
Redis hash 是一个键值对集合。
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。 每个 hash 可以存储 232 - 1 键值对(40多亿)
redis 127.0.0.1:6379> HMSET user:1 username redis.net.cn password redis.net.cn points 200 OK redis 127.0.0.1:6379> HGETALL user:1 1) "username" 2) "redis.net.cn" 3) "password" 4) "redis.net.cn" 5) "points" 6) "200" redis 127.0.0.1:6379>
3.列表
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)
redis 127.0.0.1:6379> lpush redis.net.cn redis (integer) 1 redis 127.0.0.1:6379> lpush redis.net.cn mongodb (integer) 2 redis 127.0.0.1:6379> lpush redis.net.cn rabitmq (integer) 3 redis 127.0.0.1:6379> lrange redis.net.cn 0 10 1) "rabitmq" 2) "mongodb" 3) "redis" redis 127.0.0.1:6379>
4. 集合
Redis的Set是string类型的无序集合。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
redis 127.0.0.1:6379> sadd redis.net.cn redis (integer) 1 redis 127.0.0.1:6379> sadd redis.net.cn mongodb (integer) 1 redis 127.0.0.1:6379> sadd redis.net.cn rabitmq (integer) 1 redis 127.0.0.1:6379> sadd redis.net.cn rabitmq (integer) 0 redis 127.0.0.1:6379> smembers redis.net.cn 1) "rabitmq" 2) "mongodb" 3) "redis"
5.有序集合
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
redis 127.0.0.1:6379> zadd redis.net.cn 0 redis (integer) 1 redis 127.0.0.1:6379> zadd redis.net.cn 0 mongodb (integer) 1 redis 127.0.0.1:6379> zadd redis.net.cn 0 rabitmq (integer) 1 redis 127.0.0.1:6379> zadd redis.net.cn 0 rabitmq (integer) 0 redis 127.0.0.1:6379> ZRANGEBYSCORE redis.net.cn 0 1000 1) "redis" 2) "mongodb" 3) "rabitmq"
1) 添加有序集合数据
zadd setName 80 python zadd setName 90 java zadd setName 100 php
2)查看分数
zscore setName python // '80' zscore setName php // '100'
3)按照名次查看排行榜
zrevrange setName 0 -1 withscores //0:开始索引位置 -1:结束位置(包含) 获取所有排行的数据 //withscores 排行并返回分数 > 1) “php” > 2) “100” > 3) “java” > 4) “90” > 5) “python” > 6) “80”
查看前三名
zrevrange setName 0 2 withscores //正常我们都是倒序,我们还可以从低到高排序 使用命令 zrange即可
4)直接查看排名
//与zrevrange类似,zrevrank是以分数由高到低的排序返回玩家排名(实际返回的是以0开始的索引),对应的zrank则是以分数由低到高的排序返回排名 zrevrank setName php //0
5) 增减排行榜分数
//有的排行榜是在变更时重新设置玩家的分数,而还有的排行榜则是以增量方式修改玩家分数,增量可正可负。如果执行zincrby时玩家尚不在排行榜中,则认为其原始分数为0,相当于执行zdd。 zincrby setName 15 python //95 返回修改之后的数据
6) 移除某个玩家
zrem setName java // 1
7) 删除排行榜
del setName //1
6.发布订阅
7. 批量删除key
redis-cli -h -p -n 3 keys "*" |xargs redis-cli -h -p -n 3 del -n 选择的数据库
命令练习: http://try.redis.io/