redis 五种数据类型
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连接池