- redis五种数据类型操作,重点是string类型和hash类型
答:redis的常用命令:
redis-cli 是Redis自带的基于命令行的客户端
连接Redis :redis-cli -h 127.0.0.1 -p 6379
测试连接是否正常 :redis-cli PING
incr key 给key的值+1
get key 获取key对应的value
keys * 返回所有的键
启动Redis :redis-server –port
关闭Redis :redis-cli SHUTDOWN
设置新增键值对 :set key value
判断键是否存在 :exists key
删除键 :del key
向指定的列表类型中增加一个元素,如果键不存在就创建它 :LPUSH key value
redis的五种数据类型有:string hash list set sorted set
String——字符串
String 数据结构是简单的 key-value 类型,value 不仅可以是 String,也可以是数字(当数字类型用 Long 可以表示的时候encoding 就是整型,其他都存储在 sdshdr 当做字符串)。使用 Strings 类型,可以完全实现目前 Memcached 的功能,并且效率更高。还可以享受 Redis 的定时持久化(可以选择 RDB 模式或者 AOF 模式),操作日志及 Replication 等功能。
字符串常用的语法:
赋值:set string1 hello
取值:get string1
删除:del string1 (这个命令可以用于所有的类型)
数值加一:incr num1 如果值为空,则默认从0加一,如果值无法转为数字,则报异常。
数值减一:decr num1 如果值为空,则默认从0减一,如果值无法转为数字,则报异常。
数值增加指定的数值:incrby num1 2
数值减少指定的数值:decrby num1 2
拼接:append num1 123 如果值存在就拼接,如果不存在就新增
位操作
getbit key offset
setbit key offset value
bitcount key [start][end]
bitop operation destkey key[key…]
bitop可以对多个字符串类型键进行位运算,并将结果存储在destkey中 operation可以为AND OR XOR NOT
Hash——哈希
在 Memcached 中,我们经常将一些结构化的信息打包成 hashmap,在客户端序列化后存储为一个字符串的值(一般是 JSON 格式),比如用户的昵称、年龄、性别、积分等。这时候在需要修改其中某一项时,通常需要将字符串(JSON)取出来,然后进行反序列化,修改某一项的值,再序列化成字符串(JSON)存储回去。简单修改一个属性就干这么多事情,消耗必定是很大的,也不适用于一些可能并发操作的场合(比如两个并发的操作都需要修改积分)。而 Redis 的 Hash 结构可以使你像在数据库中 Update 一个属性一样只修改某一项属性值。
哈希表常用的语法:
1、赋值与取值
HSET key field value
HGET key field
处理多个键字段
HMSET key field1 value1 field2 value2…
HMGET key field1 field2
HMGETALL key
2、判断字段是否存在
HEXISTS key field
3、当字段不存在时赋值
HSETNX key field value
4、增加数字
HINCRBY key field number
5、删除字段
HDEL key field1 filed2…
6、只获取字段名
HKEYS key
7、只获取字段值
HVALS key
8、获得字段数量
HLEN key
List——列表
List 说白了就是链表,插入删除数据非常快。可以用于消息中间件的补救措施,比如消息队列中的消息发送成功存入一个链表,发送失败存入一个链表,一段时间后将发送成功的链表清空,发送失败的链表中的消息继续发送,直到成功后存入成功的链表,目的是为了保证数据的一致性。
(1) ArrayList使用数组方式:根据索引去查询速度非常快,但是新增与删除元素时需要涉及到位移操作,效率比较低
(2)LinkedList使用双向链接方式:每个元素都记录了前后元素的指针,插入和删除数据时,只是改变了前后元素指针所指向的元素,速度快。
① lpush: 左侧插入 如:lpush mylist a b c 返回3,表示是数量。 lpush mylist 1 2 3 返回6
② rpush: 右侧插入 如:rpush mylist a b c 返回3,表示是数量。 rpush mylist 1 2 3 返回6
③ lrange: 查看列表,从哪开始到哪结束,0:表示从链表的头部开始,-1表示从链表的尾部第一个元素开始,-2表示从链表的尾部第二个元素开始
1、向列表两端增加元素
LPUSH key value1 value2…
RPUSH key value1 value2…
2、从列表两端弹出元素
LPOP key
RPOP key
3、获取列表中元素的个数
LLEN key
4、获取列表片段
LRANGE key start end
获取的元素包含start end
支持负数索引
5、删除列表中指定的值
LREM key count value
删除列表中前count个值为value的元素
6、获得/设置指定索引的元素值
LINDEX key value
LSET key index value
7、只保留列表指定字段
LTRIM key start end
8、向列表中插入元素
LINSERT key BEFORE/AFTER pivot value
现在列表中从左至右查找值为pivot的元素,然后插入value
Set——集合
Set 是一个无重复数据的无序集合,集合的概念就是一堆不重复值的组合。利用 Redis 提供的 Set 数据结构,可以存储一些集合性的数据。比如在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。因为 Redis 非常人性化的为集合提供了求交集、并集、差集等操作,那么就可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。
集合中的每一个元素都是不同的,并且没有顺序。
1、增加或删除元素
SADD key member1 memeber2…
SREM key member1 member2…
2、获得集合中的所有元素
SMEMBERS key
3、判断元素是否在集合中
SISMEMBER key member
4、集合间运算
SDIFF key1 key2… 差集
SINTER key1 key2… 交集
SUNION key1 key2… 并集
5、获得集合中元素个数
SCARD key
6、进行集合运算并存储结果
SDIFFSTORE dest key1 key2…
SINTERSTORE dest key1 key2…
SUNIONSTORE dest key1 key2…
7、随机获得结集合中的元素
SRANDMEMBER key [count]
一次获取count个元素
8、从集合中弹出一个元素
SPOP ke
Sorted Set——有序集合
和Sets相比,Sorted Sets是将 Set 中的元素增加了一个权重参数 score,使得集合中的元素能够按 score 进行有序排列,比如一个存储全班同学成绩的 Sorted Sets,其集合 value 可以是同学的学号,而 score 就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序。另外还可以用 Sorted Sets 来做带权重的队列,比如普通消息的 score 为1,重要消息的 score 为2,然后工作线程可以选择按 score 的倒序来获取工作任务。让重要的任务优先执行。
1、增加元素
ZADD key score member [score member]
2、获得元素的分数
ZSCORE key member
3、获得排名在某个范围的元素列表
ZRANGE key start stop [WITHSCORES]
ZREVRANGE key start stop [WITHSCORES]
4、获得指定分数范围的元素
ZRANGEBYSCORE key min max [WITHSCORES][LIMIT offset count]
5、增加某个元素的分数
ZINCRBY key increment member
6、获得集合中元素的数量
ZCARD key
7、获得指定分数范围内的分数个数
ZCOUNT key min max
8、删除元素
ZREM key1 key2 ….
9、按照排名范围删除元素
ZREMRANGEBYRANK key start stop
10、按照分数范围删除元素
ZREMRANGEBYSCORE key min max
11、获得元素的排名
ZRANK key member
ZREVRANK key member