🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
//基于key-value的内存数据库 // 每秒可读11W次 // MySQL 是 1000此 [toc] ## 安装(windows) [https://github.com/microsoftarchive/redis/releases](https://github.com/microsoftarchive/redis/releases) 一路到底 会默认装上服务和path,只需要输入`redis-cli`r让客户端连上服务器 ## 用途 - 集中式会话管理(session) ![](https://box.kancloud.cn/bf8ac52846d69c17fe63ccdd61036e7a_665x326.png) - 缓存服务器 不用再从数据库从头开始读,第一次从数据库中读取数据后会放在缓存中 ![](https://box.kancloud.cn/41cfa590ab70b2e9a121f77e5c5c58b9_664x354.png) ## 优势 - 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。 - 丰富的数据类型 – Redis支持二进制的字符串、列表、哈希值、集合和有序集合等数据类型操作。 - 原子性 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行 - 单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。 - 丰富的特性 – Redis还支持 发布/订阅, 通知, key 过期等等特性。 ## 启动服务器 ``` redis-server.exe redis.windows.conf ``` ## 启动客户端 cli -》client ``` redis-cli.exe -h 127.0.0.1 -p 6379 ``` ## info 查看基本信息 ``` info Memory //查看memory模块的信息 ``` ## flushall 删除数据库 ## set:设置值 ``` set name ahhh ``` ## get:获取值 ``` get name ``` ``` <<< ahhh ``` ### getrange 索引从0开始,包前包后,支持负数 ``` getrange name 1 2 getrange name 1 -1 ``` ## expire xx `<howLong>` ``` expire homepage 10 //让homepage缓存10秒 ``` 如果是set,整个都会过期,而不能只让其中的某一项过期 ## ttl ``` ttl a ``` 查看还有多久过期 ## set:sadd 和 smembers set数据结构具有天生的去重性 ``` sadd my_set_1 1 sadd my_set_1 2 sadd my_set_1 2 sadd my_set_1 3 smembers my_set_1 1) "1" 2) "2" 3) "3" ``` ### sismember 查看2在不在my_set_1中 ``` sismember my_set_1 2 ``` ### scard 返回my_set_1里有多少个成员 ``` scard my_set_1 ``` ### srem 删除 ### spop 随机取一个值**移除** ### srandmember 随机取一个值 ## sorted set 由跳跃表skip list实现 ### zadd 下面的数字是后面成员的编号 ``` zadd my_sorted_set_1 100 a 0 b 200 c -1000 d ``` ### zrangebyscore 和 zrevrangebysocre 取0(包括)到100(包括)编号的成员 `withscores`参数决定是否在返回值中带上编号 ``` zrangebyscore my_sorted_set_1 0 100 [WITHSCORES] ``` 降序取 ``` zrevrangebyscore my_sorted_set_1 100 0 [WITHSCORES] ``` ## hash set 相当于js中的 ``` map.set('abc',123); map.set('def',456); ``` ### hset hset只能同时设置一对值 key-value ``` hset my_hash_1 abc 123 ``` 要想设置多组值,请使用`hmset` ### hgetall ``` hgetall my_hash_1 ``` ## incr:增加 递增1 ``` incr age ``` ### incryby 也可以为负数 ``` incrby age 5 ``` ## decr ### decrby ## exists:存在否 ## del:删除 ## type \<key\> ``` type name ``` ``` <<< string ``` ## 哈希值 哈希值是一个字符串类型的Key和值的映射表,特别适合用于存储对象 ### hset 一次只能设置一组键值对 ![](https://box.kancloud.cn/cd2204e64c9a08d9858cbfb4a8f57bb8_304x345.png) ### hmset 一次允许设置多组键值对 ![](https://box.kancloud.cn/520ca8776cd1ec01b42cccedcadbe43a_385x193.png) ### hget hgetall ![](https://box.kancloud.cn/0fd642907c5e4f7fac18f10b56e65e68_275x171.png) ### hkeys ![](https://box.kancloud.cn/6d6d67f3501db36dbc8791d04dff1ffe_235x74.png) 并没有hvalues,只有keys = =! ### hdel ## 列表 ### lpush rpush , lrange ### lpop rpop ### LINDEX \<key\> ### LLEN \<key\> ### LREM \<key\> 删除 ``` LREM myid 0 8 ``` 其中`0`表示全局匹配, `8`是匹配项(匹配值,不是匹配 key) ## 集合 ### SADD ### SREM ### SCARD ### SINTER 交集 ### SDIFF 差集 SDIFF A B 和 SDIFF B A 不一样 ### SUNION 并集 ## 有序集合 有序集合和集合一样也是字符串的集合,而且不能重复 不同之外是每个集合都会关联一个double类型的分数,redis可以通过这个分类来为集合中的元素进行从小到大排序,元素不能重复,但分数可以重复 ### ZADD ZCARD ZRANGE 会按照分数大小(从小到大)插入 ``` ZADD stus 60 zhangsan 80 lisi 90 wangwu ``` ![](https://box.kancloud.cn/e460414dbfe61b88b0bae609383f02cd_471x137.png) 默认不显示分数,如果想: ![](https://box.kancloud.cn/cc68dc9b95e392017332ab159c68583c_375x150.png) ### ZREM