数据结构类型操作:
数据结构:存储数据的方式
数据类型
算法:取数据的方式,代码就把数据进行组合,计算、存储、取出。
排序算法:冒泡排序、堆排序 二分。
key:
key的命名规则不同于一般语言,键盘上除了空格、\n换行外其他大部分字符都可以使用。
像“my key”和“mykey\n”这样包含空格和换行的key是不允许的。变量名称:
我们在使用的时候可以自己定义一个key的格式:
key的命名不要太长,占用内存,查询慢。
key不要太短。像u:1000:pwd:123456 就不如:user:1000:password:123456 可读性好。
127.0.0.1:6379> exists name
(integer) 1
127.0.0.1:6379> exists age
(integer) 0
127.0.0.1:6379>
127.0.0.1:6379> help existsEXISTS key [key ...]summary: Determine if a key existssince: 1.0.0group: generic127.0.0.1:6379> exists name age
里面默认有16个数据库,从0到15。
move name 16
select 16
keys *
dbsize
flushdb
flushall
这两个命令在生产环境中尽量少用。
String数据类型:
String是Redis最基本的类型。
Redis的String可以包含任何数据。包括jpg图片,base64或者序列化对象。
单个value的最大上限是512MB。
如果只用String类型,Redis就可以看做是持久化性的memcached。
序列化字符串。
图片也可以字符串。
substr name 5 10
append name centos
strlen name
set:
Redis的set是String类型的无序集合,集合里面不允许有重复的元素。
set元素最大可以包含2的32次方-1个元素。
关于set元素类型除了基本的添加删除操作,其他常用的操作还包括集合的取并集union、交集intersection、差集difference、通过这些操作可以很容易地实现sns中的好友推荐功能。
而且是内存操作,速度非常快。
tips:mysql连表文氏图:
需求:实现朋友圈的存储和共同好友的计算。
设计:
key value
xiaomingFR xiaohong xiaoqiang xiaogang xiaohei xiaobai
xiaohongFR xiaoming xiaolv xiaolan xiaobai xiaohei
127.0.0.1:6379> sadd xiaomingFR xiaohong xiaoqiang xiaogang xiaohei xiaobai
(integer) 5
127.0.0.1:6379> sadd xiaohongFR xiaoming xiaolv xiaolan xiaobai xiaohei
(integer) 5
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> smembers xiaomingFR
1) "xiaogang"
2) "xiaohong"
3) "xiaoqiang"
4) "xiaohei"
5) "xiaobai"
127.0.0.1:6379> smembers xiaohongFR
1) "xiaobai"
2) "xiaolv"
3) "xiaolan"
4) "xiaoming"
5) "xiaohei"
127.0.0.1:6379>
127.0.0.1:6379> sinter xiaomingFR xiaohongFR
1) "xiaohei"
2) "xiaobai"
127.0.0.1:6379> sunion xiaomingFR xiaohongFR
1) "xiaobai"
2) "xiaolv"
3) "xiaohong"
4) "xiaogang"
5) "xiaolan"
6) "xiaoming"
7) "xiaoqiang"
8) "xiaohei"127.0.0.1:6379> sdiff xiaomingFR xiaohongFR
1) "xiaohong"
2) "xiaogang"
3) "xiaoqiang"
127.0.0.1:6379> sdiff xiaohongFR xiaomingFR
1) "xiaolv"
2) "xiaolan"
3) "xiaoming"
主要是看业务是怎么操作的。
使用set建立黑名单(白名单)
127.0.0.1:6379> sadd black_list 192.168.17.1
(integer) 1
127.0.0.1:6379> sismember black_list 192.168.17.1
(integer) 1
127.0.0.1:6379> sismember black_list 192.168.17.110
(integer) 0
zset:
和set一样sorted set也是string类型元素的集合,有序集合,元素不允许重复。
不同的是每个元素都会关联一个权。权重,score。
通过权值可以有序地获取集合中的元素,可以通过score值进行排序。
这个score就是权值。
需求:实现手机App市场的软件排名。排名榜单。
设计:
Key : hotTop
id Score(权重) name
1 2 QQ
2 3 wechat
3 5 alipay
4 7 taobao
5 10 king
6 8 jd
127.0.0.1:6379> zadd hotTop 2 QQ 3 wechat 5 alipay 7 taobao 10 king 8 jd
(integer) 6# 从小到大排序。
127.0.0.1:6379> zrange hotTop 0 5
1) "QQ"
2) "wechat"
3) "alipay"
4) "taobao"
5) "jd"
6) "king"# 从大到小排序。
127.0.0.1:6379> zrevrange hotTop 0 5
1) "king"
2) "jd"
3) "taobao"
4) "alipay"
5) "wechat"
6) "QQ"127.0.0.1:6379> zscore hotTop wechat
"3"
zrange命令可以看到jd排第五名,淘宝排第四名。
获取jd的score和taobao的score。
127.0.0.1:6379> zscore hotTop jd
"8"
127.0.0.1:6379> zscore hotTop taobao
"7"
把jd的权值调小到6,才能排到taobao前面。那jd的权值减小2。
127.0.0.1:6379> zincrby hotTop -2 jd
"6"
127.0.0.1:6379>
127.0.0.1:6379> zrange hotTop 0 5
1) "QQ"
2) "wechat"
3) "alipay"
4) "jd"
5) "taobao"
6) "king"
127.0.0.1:6379> zscore hotTop jd
"6"
使用zincrby 增加一个负值,就能将score权值进行了调整。
zrank是排名下标。从小到大排名。
127.0.0.1:6379> zrank hotTop jd
(integer) 3
hash:
如果采用hash结构,redis的内存使用率更高。效率更高一些。
使用redis做缓存,可以使用hash结构,压缩效率和使用效率更高,比String。
hash存储数据和关系型数据库mysql,存储的一条数据的结构极为相似。
key: value (field: value)
127.0.0.1:6379> hmset devops username devops phone 13813424930 email 853166277@qq.com job java
OK127.0.0.1:6379> hget devops job
"java"
127.0.0.1:6379> hgetall devops
1) "username"
2) "devops"
3) "phone"
4) "13813424930"
5) "email"
6) "853166277@qq.com"
7) "job"
8) "java"127.0.0.1:6379> hdel devops email
(integer) 1
127.0.0.1:6379> hgetall devops
1) "username"
2) "devops"
3) "phone"
4) "13813424930"
5) "job"
6) "java"127.0.0.1:6379> hkeys devops
1) "username"
2) "phone"
3) "job"
127.0.0.1:6379> hvals devops
1) "devops"
2) "13813424930"
3) "java"127.0.0.1:6379> hset devops email 13813424930
(integer) 1
127.0.0.1:6379>
127.0.0.1:6379> hgetall devops
1) "username"
2) "devops"
3) "phone"
4) "13813424930"
5) "job"
6) "java"
7) "email"
8) "13813424930"
使用Redis做缓存,要学会使用hash做缓存。