李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
其它
正文
Redis简单命令
Leefs
2020-04-15 AM
2765℃
2条
# Redis简单命令 ### 一、Redis 简介 + 1、Redis 是一个 Key-Value 类型的内存数据库,整个数据库统统加载在内存当中进行操作,定期 通过异步操作把数据库数据flush到硬盘上进行保存。 + 2、因为是纯内存操作, Redis 的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能 快的Key-Value DB。 + 3、Redis 大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,因此 Redis 可 以用来实现很多有用的功能。 + 4、Redis 的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此 Redis适合的场景主要局限在较小数据量的高性能操作和运算上。 ### 二、Redis应用场景 ##### 1、缓存 缓存数据,缓存会话信息等... ##### 2、消息队列 Reids在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得Redis能作为一个很好的消息 队列平台来使用。 ##### 3、排行榜/计数器 Redis在内存中对数字进行递增或递减的操作实现的非常好。集合( Set )和有序集合( Sorted Set )也使得我们在执行这些操作的时候变的非常简单。 ##### 4、发布/订阅 Redis 的发布/订阅功能。发布/订阅的使用场景确实非常多。我已 看见人们在社交网络连接中使用,还可作为基于发布/订阅的脚本触发器,甚至用Redis的发布/订阅功能 来建立聊天系统! ### 三、Redis数据类型 + String 字符串 + Hash 类型 + List 列表 + Set 集合 + ZSet 有序集合 *注意:在Redis 中的命令语句中,命令是忽略大小写的,而key是不忽略大小写的。* ##### 1、String ```sql (1)键和值都是字符串 (2)set key value 设置值 (3)get key 获取值 (4)多次设置相同 key 的 value 会覆盖 (5)setnx key value 不存在则设置值 (6)del key 删除键值 (7)setex key 有效期时间(单位:秒) value,键值有效期之后自动失效 (8)mset key1 value1 key2 value2 keyn valuen 一次设置多个值 (9)mget key1 key2 keyn 一次获取多个值 (10)getset key value 返回key的旧值并将该key设置为新值 (11)incr | decr key 对一个值进行自增和递减 (12)incrby|decrby key 步长 对一个值进行步长自增和递减 (13)append key val 给key的value追加val的字符串 (14)strlen key 返回key对于的字符串长度 ``` ##### 2、Hash **适合存储对象,将一个对象类型存储在hash要比存储在string类型里占用更小的内存空间** ```redis (1)hset hash_name key value 存一个键值对到名为hash_name的Hash里 (2)hget hash_name key 从hash_name的hash里取key的value (3)hmset hash_name key1 value1 key2 value2 keyn valuen 一次设置多个值 (4)hmget hash_name key1 key2 keyn 一次获取多个值 (5)hsetnx hash_name key val 不存在则设置为val值 (6)hincrby | hdecrby hash_name key 步长 集合的步长递增和递减 (7)hexists hash_name key 集合里是否存在key,不存在返回0 (8)hlen hash_name 集合里的所有键的数量 (9)hdel hash_name key 删除名称为hash_name 的hash里key对应的键值 (10)hkeys hash_name 获取hash里的所有key (11)hvals hash_name 获取hash里的所有value (12)hgetall hash_name 获取hash里的所有key,value ``` ##### 3、List **List 内部是使用双向链表实现,所以获取越接近两端的元素速度就越快。这意味着即使是一个有几千万 个元素的列表,获取头部或尾部的10条记录也是极快的。** 链表结构,双向链表,既可以成为栈,也可以成为队列,元素可以重复 ```redis (1)lpush 从头部加入元素,先进后出, lpush list_name value (2)rpush 从尾部加入元素,先进先出, rpush list_name value (3)lrange list_name 0 -1 到名为list_name的list里从0开始,取出所有元素,-1为取出所有,即到直到没有元素位置 (4)linsert list_name before “value” “insert_value” 在 value 值之前插入 insert_value (5)lset list_name 下标 "value" 将指定 下标 的值替换为 value (6)lrem list_name 删除个数 "value" 从指定下标开始,删除n个值为 value 的元素 (7)ltrim list_name 下标 上标 保留从下标到上标的元素 (8)lpop list_name 从 list 的头部删除元素,并返回删除元素 (9)rpop list_name 从 list 的尾部删除元素,并返回删除元素 (10)rpoplpush list_name_1 list_name_2 value 先从list_name_1中移除元素,再往 list_name_2中的头部添加元素 (11)lindex list_name index 返回 index 处的元素 (12)llen list_name 返回元素的个数 ``` ##### 4、Set + Set 中的数据是不重复且没有顺序。 通过 Hashtable 实现 。 + Set 集合类型的常用操作是向集合中加入或删除元素、判断某个元素是否存在等。 + Set 还提供了多个集合之间的交集、并集、差集的运算。 ``` redis (1)sadd set_name value 向set_name的set中添加value元素 (2)srem set_name value 移除set_name中的value元素 (3)spop set_name 移除并返回集合中的一个随机元素 (4)smembers set_name 查看set里的所有元素 (5)sdiff set_name1 set_name2 取俩个集合的差集,那个集合在前面就以那个为标准 (6)sdiffstore set_name3 set_name1 set_name2 取 set1 和 set2 的差集并存储到 set3 ``` ![Redis简单命令01.png][1] ```redis (1)sinter key1 [key2] 返回给定所有集合的交集 (2)sinterstore set_name3 set_name1 set_name2 取 set1 和 set2 的交集并存储到 set3 ``` ![Redis简单命令02.png][2] ``` (1)sunion key1 [key2] 返回给定所有集合的并集 (2)sunionstore set_name3 set_name1 set_name2 取 set1 和 set2 的并集并存储到 set3 ``` ![Redis简单命令03.png][3] ```java (1)smove set_name1 set_name2 value 将set_name1中的元素value移动到set_name2中 (2)scard set_name 查看集合的元素个数 (3)sismember set_name value 查看value 是否在set中 (4)srandmember set_name 随机返回一个set中的元素 ``` ##### 5、 ZSet **介绍** + 有序不重复的集合。 + 在 Set 类型的基础上, Zset 集合中的每个元素都关联一个分数,这使得我们不仅可以完成插 入、删除和判断元素是否存在在集合中。 + 还能够获得分数最高或最低的前N个元素、获取指定分数范围内的元素等与分数有关的操作。 + 分数类比List集合的索引 **Zset 集合和 List 集合比较** 1、二者都是有序的。 2、二者都可以获得某一范围的元素。 **区别:** (1)List 集合 类型是通过双向链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问 中间数据的速度会变慢。 (2)Zset 集合 使用散列表( Hashtable )实现,所以即使读取位于中间部分的数据也很快。 (3)List 集合 中不能简单的调整某个元素的位置,但是 Zset 集合 可以(通过更改分数实现) (4)Zset 集合 要比 List 集合 更耗内存。 **命令** ```java (1)zadd key score value 向 Zset 中的索引n中添加元素(value) (2)zrange key 0 -1 [withscores] 列出所有元素,索引从0开始到-1(所有),并显示分数 (3)zrem key value 删除zset中的元素value (4)zincrby key increment member 步长,以指定步长去自动递增或递减对应元素的分数 (5)zrangebyscore key min max [WITHSCORES] [LIMIT offset count] 返回所有符合条件 的成员 (6)zrank set_name value 如果成员在有序集合存在,返回整数:成员的权重。如果成员在有序 集合不存在或键不存在,字符串返回nil。 (7)zrevrank set_name value 返回有序集key中成员member的排名,其中有序集成员按score值从大到小排列。排名以0为底,也 就是说,score值最大的成员排名为0。 使用zrank命令可以获得成员按score值递增(从小到大)排列 的排名(顺序)。 (8)zremrangebyrank key start stop 删除有序集key中,指定排名(rank)区间内的所有成员。下标参数start和stop都以0为底,0处是分数 小的那个元素。这些索引也可是负数,表示位移从高分处开始数。例如,-1是分数高的元 素,-2是分数第二高的,依次类推。 (9)zremrangebyscore key min max 删除所有符合条件 min< =score <= max 的成员 (10)zcard set_name 返回集合里所有元素的个数 (11)zcount key min max 返回所有符合条件 min < = score <= max 的成员个数 ``` ### 四、Redis 常用命令 ```java (1)keys * 所有的键,支持模糊查询 (2)exists key 是否存在指定键 (3)expire key time_out 设置某个key的过期时间,单位为秒,使用 ttl key 查看剩余时间,-1代表永不过期 ,-2代表过期 (4)persist key 取消过期时间,执行之后再执行 ttl key 返回 -1 (5)select 选择数据库,数据库为0-15(默认共16个库),默认进入0库,早期16个库是为了安全, 可以使用8个库用作备份,看你怎么拆分,或者不同的数据类型放到不同的数据库,现在已经不考 虑,redis已经有集群实现。 (6)move [key] [数据库下标] 移动数据到其他库 (7)rename key newkey 重命名 key (8)dbsize 查看数据库的key数量 (9)info 获取数据库信息 (10)flushdb 清空当前数据库 (11)flushall 清空所有数据库 ``` [1]: https://lilinchao.com/usr/uploads/2020/04/3781987142.png [2]: https://lilinchao.com/usr/uploads/2020/04/2496264657.png [3]: https://lilinchao.com/usr/uploads/2020/04/3102003880.png
标签:
Redis
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://www.lilinchao.com/archives/858.html
上一篇
MySQL按条件统计数量
下一篇
Redis配置文件redis.conf介绍
取消回复
评论啦~
提交评论
已有 2 条评论
你猜
差集/补集
回复
2020-11-25 10:05
Leefs
博主
@你猜
你很棒
回复
2020-11-25 19:11
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
标签云
Java编程思想
SpringCloud
Spring
RSA加解密
LeetCode刷题
Zookeeper
Beego
FastDFS
Python
Java工具类
数据结构和算法
微服务
Golang
字符串
Kafka
Redis
Flume
FileBeat
Tomcat
容器深入研究
Hive
JavaScript
JavaWEB项目搭建
算法
CentOS
ajax
Azkaban
高并发
Elasticsearch
Linux
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
差集/补集
你很棒