Redis 有以下五种数据类型:
String,Hash(类似于 javaBean),List(类似于 LinkedList),Set(类似于 HashSet), 有序的 Set 集合
1,key 的命名
key 名不要过长, 否则影响使用效率;
-> 因为他的 key 搜索规则是由短到长开始搜索
2, 乱码问题
字符串在 Redis 中是二进制安全的
二进制安全和数据安全没有关系
MySQL - 关系型数据库, 所有的关系型数据库都是二进制不安全的 [乱码丢失数据]
-> 因为他有频繁的编解码, 执行效率低, 并且容易乱码
而 Redis 编码和解码只会发生在客户端. 没有频繁的编解码, 执行效率很高, 不会出现乱码
3,String 数据类型常用命令
set key value
get key , 如果 key 不存在, 返回 (nil)
del key , 返回值为删除了几条数据
getset key value 修改, 先获取, 后修改
incr key, 如果不存在, 则会初始化为 0 后再进行自增
decr key
append key value, 如果不存在, 则会自动创建, 返回值为当前字符串的长度
- incryby key increment
- decryby key increment
4,Hash 数据类型常用命令
特点: 占用的磁盘空间极少
flushdb 命令将数据库中的数据全部删除
hset key field value 设置单个变量的单个键值对
hmset key field value field2 value2 设置单个变量的多个键值对, 用空格分隔
- hget key field value
- hmget key field field2
hgetall key 获取所有, 以键值对双双出现
hdel key field 删除一个或者多个字段
del key 删除整个键值对
hincrby key field increment
hexists key field 若存在返回 1, 不存在返回 0
hlen 获取 key 中的 field 数量
hkeys key 获取所有的字段
hvals key 获取所有的字段值
5,List 数据类型常用命令
由于 Redis 操作中, 最多的操作是进行元素的增删, 所以 Redis 选择了链表
使用环境: 做大数据集合的增删, 任务队列
lrange key start end 获取某个索引范围内的元素值, 可以为负数, 若为 - 1, 则表示链表尾部的元素
查询所有元素: lrange key 0 -1
没有 rrange
lpush key value value2 在链表头部插入元素, 如果该链表不存在, 则自动创建一个; 结果为元素的个数
rpush key value value2 在链表尾部插入元素
lpop key 返回并且弹出链表第一个元素, 如果 key 不存在, 返回 nil
rpop key 从尾部弹出元素
llen key 获取元素的个数
lrem key count value 删除 count 个值为 value 的元素, 如果 count 大于 0, 从头向尾开始删; 如果 count 小于 0, 则从尾向头开始删, 如果 count 等于 0, 则删除所有链表中等于 value 的元素
-> 不过该命令的效率极为低下, 不建议使用; 讲解说这种方式会为元素赋索引, 导致速率变慢
通过索引替换元素: lset key index value
在索引前 / 后插入元素: linsert key before/after pivot value
这个 pivot 指的是元素名称, 讲解给的说明是不是错的呀
任务队列操作
rpoplpush resource destination 将链表的尾部元素弹出并且添加到另一个链表的头部
-> 此处默认的逻辑是, 我们插入元素一般是从头部开始插入, 所以尾部元素是最先插入的
循环队列
rpoplush list1 list1 两个链表是一个即可
6,Set 数据类型常用命令
set 能存储特别多的元素, 最大元素数量是 4 亿多
hashset 无序, 不重复
Redis 操作中, 涉及到两个大数据的并集, 交集, 差集运算
sadd key value value2 向 set 中添加数据
srem key value value2 删除
smembers key 获取可以中所有元素
sismember key member 判断指定成员是否在该 set 中, 返回 1 或 0(无论集合里面有多少元素都可以极快的返回结果)
集合运算
差集运算 sdiff A B 属于 A 但不属于 B 的元素集合, 所以这个与 key 的顺序有关系
交集运算 sinter A B C...
并集运算 sunion A B C...
scard key 获取 set 中成员的数量
srandmember key 随机返回 set 中的一个成员
sdiffstore,sinterstore,sunionstore 将返回结果存储在一个集合中
规范: sinterstore destination A B C...
7, 有序 Set 集合
使用场景: 专门用来做排行榜
zadd key score member score2 member2
如 zadd set1 5000 xiaoming 1000 xiaohong
zscore key member 获取指定成员的分数
zcard key 获取集合中成员数量
zrem key member1 member2 删除集合指定成员, 批量删除
zrange key start end [withscores] 获取集合中某个范围内的成员,[withscores] 参数表明返回的成员包含其分数, 中括号表示可选, 分数由小到大
zrevrange key start stop [withscores] 按照元素的分数从大到小的顺序返回索引范围内的所有元素, 包括两端的元素, 分数由大到小
zremrangebyrank key start stop 按照排名范围删除元素 (其实就是按照索引进行删除)
zremrangebyscore key min marx 按照分数范围删除元素
zrangebyscore key min max [withscores] [limit 0 1] 按照分数范围进行排序, 还可以进行分页, 按照分数从低到高排序
zincryby key increment member
zcount key min max 获取分数在此范围内的成员
zrank key member 返回成员在集合中的排名, 按照索引来的 (由小到大)
zrevrank key member 返回成员在集合中的排名, 按照索引来的 (由大到小)
8, 通用命令
key * 可以查看所有的 key
key ?
del key key2...
- exists key
- rename key newkey
type key 获取 key 对应的值类型, 有序 set 集合会返回 zset, 如果不存在, 会返回 none
设置 key 的过期时间, 默认为永久生存
expire key 30 单位: 秒
ttl key 返回 key 的剩余生存时间, 如果没有设置时间, 返回 - 1, 如果超时不存在了, 则返回 - 2
备注:
1) 当某个 key 中的键值对全部删除后, 这个 key 还存在吗?
-> 不存在了
2)Jedis 为 Java 操作 Redis 的工具
连接后, 注意打开端口对应的防火墙
在 java 中设置的变量, 在 Linux 中看, 看到的是二进制数据, 只有在 Java 中获取时才可以看到解码的数据;
-> 这就是 Redis 二进制安全的体现
3) 配置 Jedis 连接池
来源: http://www.bubuko.com/infodetail-2957136.html