1.基于内存的key-value数据库
2.基于c语言编写的,可以支持多种语言的api //set每秒11万次,取get 81000次
3.支持数据持久化
4.value可以是string,hash, list, set, sorted set
使用场景
1. 去最新n个数据的操作
2. 排行榜,取top n个数据 //最佳人气前10条
3. 精确的设置过期时间
4. 计数器
5. 实时系统, 反垃圾系统
6. pub, sub发布订阅构建实时消息系统
7. 构建消息队列
8. 缓存
cmd访问redis
redis-cli.exe -h 127.0.0.1 -p 6379
key
keys * 获取所有的key<br /> select 0 选择第一个库<br /> move myString 1 将当前的数据库key移动到某个数据库,目标库有,则不能移动<br /> flush db 清除指定库<br /> randomkey 随机key<br /> type key 类型<br /> <br /> set key1 value1 设置key<br /> get key1 获取key<br /> mset key1 value1 key2 value2 key3 value3<br /> mget key1 key2 key3<br /> del key1 删除key<br /> exists key 判断是否存在key<br /> expire key 10 10过期<br /> pexpire key 1000 毫秒<br /> persist key 删除过期时间
string
set name cxx<br /> get name<br /> getrange name 0 -1 字符串分段<br /> getset name new_cxx 设置值,返回旧值<br /> mset key1 key2 批量设置<br /> mget key1 key2 批量获取<br /> setnx key value 不存在就插入(not exists)<br /> setex key time value 过期时间(expire)<br /> setrange key index value 从index开始替换value<br /> incr age 递增<br /> incrby age 10 递增<br /> decr age 递减<br /> decrby age 10 递减<br /> incrbyfloat 增减浮点数<br /> append 追加<br /> strlen 长度<br /> getbit/setbit/bitcount/bitop 位操作<br />
hash
hset myhash name cxx<br /> hget myhash name<br /> hmset myhash name cxx age 25 note "i am notes"<br /> hmget myhash name age note <br /> hgetall myhash 获取所有的<br /> hexists myhash name 是否存在<br /> hsetnx myhash score 100 设置不存在的<br /> hincrby myhash id 1 递增<br /> hdel myhash name 删除<br /> hkeys myhash 只取key<br /> hvals myhash 只取value<br /> hlen myhash 长度
list
lpush mylist a b c 左插入<br /> rpush mylist x y z 右插入<br /> lrange mylist 0 -1 数据集合<br /> lpop mylist 弹出元素<br /> rpop mylist 弹出元素<br /> llen mylist 长度<br /> lrem mylist count value 删除<br /> lindex mylist 2 指定索引的值<br /> lset mylist 2 n 索引设值<br /> ltrim mylist 0 4 删除key<br /> linsert mylist before a 插入<br /> linsert mylist after a 插入<br /> rpoplpush list list2 转移列表的数据<br />
set
sadd myset redis <br /> smembers myset 数据集合<br /> srem myset set1 删除<br /> sismember myset set1 判断元素是否在集合中<br /> scard key_name 个数<br /> sdiff | sinter | sunion 操作:集合间运算:差集 | 交集 | 并集<br /> srandmember 随机获取集合中的元素<br /> spop 从集合中弹出一个元素<br />
zset
zadd zset 1 one<br /> zadd zset 2 two<br /> zadd zset 3 three<br /> zincrby zset 1 one 增长分数<br /> zscore zset two 获取分数<br /> zrange zset 0 -1 withscores 范围值<br /> zrangebyscore zset 10 25 withscores 指定范围的值<br /> zrangebyscore zset 10 25 withscores limit 1 2 分页<br /> Zrevrangebyscore zset 10 25 withscores 指定范围的值<br /> zcard zset 元素数量<br /> Zcount zset 获得指定分数范围内的元素个数<br /> Zrem zset one two 删除一个或多个元素<br /> Zremrangebyrank zset 0 1 按照排名范围删除元素<br /> Zremrangebyscore zset 0 1 按照分数范围删除元素<br /> Zrank zset 0 -1 分数最小的元素排名为0<br /> Zrevrank zset 0 -1 分数最大的元素排名为0<br /> Zinterstore<br /> zunionstore rank:last_week 7 rank:20150323 rank:20150324 rank:20150325 weights 1 1 1 1 1 1 1<br /> <br />
排序:
sort mylist 排序<br /> sort mylist alpha desc limit 0 2 字母排序<br /> sort list by it:* desc by命令<br /> sort list by it:* desc get it:* get参数<br /> sort list by it:* desc get it:* store sorc:result sort命令之store参数:表示把sort查询的结果集保存起来
订阅与发布:
订阅频道:subscribe chat1<br /> 发布消息:publish chat1 "hell0 ni hao"<br /> 查看频道:pubsub channels<br /> 查看某个频道的订阅者数量: pubsub numsub chat1<br /> 退订指定频道: unsubscrible chat1 , punsubscribe java.*<br /> 订阅一组频道: psubscribe java.*<br />
redis事物:
隔离性,原子性, <br /> 步骤: 开始事务,执行命令,提交事务<br /> multi //开启事务<br /> sadd myset a b c<br /> sadd myset e f g<br /> lpush mylist aa bb cc<br /> lpush mylist dd ff gg
服务器管理
dump.rdb<br /> appendonly.aof<br /> //BgRewriteAof 异步执行一个aop(appendOnly file)文件重写<br /> 会创建当前一个AOF文件体积的优化版本<br /> <br /> //BgSave 后台异步保存数据到磁盘,会在当前目录下创建文件dump.rdb<br /> //save同步保存数据到磁盘,会阻塞主进程,别的客户端无法连接<br /> <br /> //client kill 关闭客户端连接<br /> //client list 列出所有的客户端<br /> <br /> //给客户端设置一个名称<br /> client setname myclient1<br /> client getname<br /> <br /> config get port<br /> //configRewrite 对redis的配置文件进行改写<br />rdb save 900 1save 300 10save 60 10000<br />aop备份处理appendonly yes 开启持久化appendfsync everysec 每秒备份一次<br />命令:bgsave异步保存数据到磁盘(快照保存)lastsave返回上次成功保存到磁盘的unix的时间戳shutdown同步保存到服务器并关闭redis服务器bgrewriteaof文件压缩处理(命令)
geospatial操作指令(经纬度)
geoadd china:city 纬度 精度 城市名 #添加城市到key中
geopos china:city 城市名 #获取指定城市的纬度 经度
geodist china:city 城市名 城市名 单位 #获取两城市之间的直线距离,默认单位m,可自己指定
georadius china:city 纬度 精度 100 km #获取对应经纬度100km内的元素,可用于实现附近的人
georadius china:city 纬度 精度 100 km withdist #带直线距离显示,单位用前面的
georadius china:city 纬度 精度 100 km withcoord #带经纬度显示
georadius china:city 纬度 精度 100 km count n #只统计n个单位
georadiusbymember china:city 城市 100 km #获取指定元素100km内的元素
geohash china:city 城市 #返回11个字符长度的geohash字符串
Bitmaps(用户量很大 计算网站的独立访问的用户)
setbit key offset value #设置值
getbit key offset #获取值
bitcount key start end #获取Bitmaps指定范围值为1的个数
bitop op key1 key2 #Bitmaps间的运算
op可以为:
- and:交集
- or:并集
- not:非
- xor:异或
bitops key targetBit start end #计算Bitmaps中第一个值为targetBit的偏移量
HyperLogLog(适合用来计算海量值的不重复出现次数和)
有以下场景适合使用此数据结构:
- 计算用户的UV(统计1天内访问某站点的用户数,相同用户不被重复计数)
- 统计注册 IP 数
- 统计每日访问 IP 数
- 统计页面实时 UV 数
- 统计在线用户数
- 统计用户每天搜索不同词条的个数
pfadd key element[element …] #把element元素存储到hyperLogLog结构中
pfcount key #获取hyperLogLog计算的基数
pfmerge destination key [key … #把多个hyperLogLog结构merge存储到destination的key中