官网对于redis的介绍
官网对于redis的介绍
----Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间 件MQ。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合 (sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间 (geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU 驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
五大基本类型的操作及使用场合
Redis-Key
查看所有的key
keys *
查看key是否存在
EXISTS key
移除key
move key num
设置key的过期时间
EXPIRE key second
查看key的过期时间
ttl key
查看当前key的类型
type key
String字符串类型
设置key的值
set key value
获取key的值
get key
追加key的值
如果key不存在 就相当于 set key
APPEND key value
查看key的值的长度
STRLEN key
自增自减的功能
#自增 incr key #自减 decr key
自增多少个 num:自增个数
incrby key num
自减多少个
decrby key num
字符串范围 range
GETRANGE key start end
#示例 截取0-3个字符串 GETRANGE key 0 3
获取全部字符串 GETRANGE key 0 -1 替换字符串 SETRANGE key offset value
设置字符串过期
setex key seconds value #(设置过期时间) setnx key value #不存在设置(分布式锁中常常用到) #setnx key 如果这个key存在 创建失败 #setnx key 如果不存在 创建成功
一次性设置多个值
key 存在就不创建
mset key value [key value ...]
设置多个值 要么同时成功,要么同时失败 原子性操作
msetnx key value [key value ...] 设置对象 设置user:1对象 值为json字符串来保存一个对象
先get后set命令
getset key value
如果不存在,返回nill 设置值
如果存在值,返回值,更新值
String类似的使用场景:value除了是我们的字符串还可以是我们的数字!
例如:
计数器
统计多单位的数量
粉丝数
对象缓存存储
List(列表)
所有的list命令都是用l开头的,Redis不区分大小命令
LPUSH 将一个值或者多个值,插入到列表头部 (左)
LPUSH key value
RPUSH 将一个值或者多个值,插入到列表位部 (右)
RPUSH key value
lpop &rpop 移除list的值 lpop key #从最左边移除一个元素 rpop key #从最右边移除一个元素
lindex 通过下标获取list的值 lindex key index #通过下标获取list的值 llen 获取list的长度 llen key LREM 移除list指定的值 LREM key count element count:移除几个
rpoplpush 移动列表元素
EXISTS 判断列表存不存在 EXISTS key lset指定列表的下标设置值(更新值) 如果值不存在就报错
lset key index element 往list指定的元素前面或后面插入值 LINSERT key BEFORE|AFTER pivot element
List的使用场景
他实际上是一个链表,before Node after , left,
right 都可以插入值 如果key 不存在,创建新的链表
如果key存在,新增内容
Set(集合)
set中的值是不能重读的!
添加set集合的值
sadd key member [member ...]
获取set集合的值
SMEMBERS key
获取set集合元素个数
SCARD key
移除set的元素
SREM key member [member ...]
随机获取set的元素
SRANDMEMBER key [count]
count:指定获取几个元素
随机移除一个元素
spop key
将指定的set集合的元素移到另一个set集合中
smove source destination member
查看两个set集合中的不同的元素
SDIFF key [key ...] key在前查看谁
查看两个set集合中的交集(共同好友)
SINTER key [key ...]
查看两个set集合中的并集
SUNION key [key ...]
Set的使用场景
微博,A用户将所有关注的人放在一个set集合中!将它的粉丝也放在一个集合中!
共同关注,共同爱好,二度好友,推荐好友!(六度分割理论)
Hash(哈希)
Map集合,key-map! 时候这个值是一个map集合! 本质和String类型没有太大区别,还是一个简单的 key-vlaue!
添加值
hset key field value [field value ...] hmset key field value [field value ...]
获取值
hget key field hmget key field [field ...]
删除值
hdel key field [field ...]
获取hash的字段长度
hlen key
判断hash指定的字段是否存在
HEXISTS key field
只获得所有field
hkeys key
只获得所有value
hvals key
自增自减
HINCRBY key field increment
自增
HINCRBY myhash user 1
#自减
HINCRBY myhash user -1
设置值如果不存在则可以设置 如果存在则不能设置
hsetnx key field value
Hash的使用场景:
hash变更的数据 user name age,尤其是是用户信息之类的,经常变动的信息! hash 更适合于对象的 存储,String更加适合字符串存储!
Zset(有序集合)
在set的基础上,增加了一个值,set k1 v1 zset k1 score1 v1
添加值
zadd key [NX|XX] [CH] [INCR] score member [score member ...]
从小到大排序
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
总大到小排序
zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count] ZREVRANGE key start stop [WITHSCORES]
移除zset的指定元素
zrem key member [member ...]
获取有序集合中的个数
zcard key
获取指定区间的成员数量
zcount key min max
Zset的使用场景
案例思路:set 排序 存储班级成绩表,工资表排序!
普通消息,1, 重要消息 2,带权重进行判断! 排行榜应用实现,取Top N 测试!