Redis学习笔记
1. 链接
2. Linux下安装
- 下载安装包
- 解压redis安装包,程序/opt
- 基本的环境安装
yum -y install gcc-c++
# 查看gcc版本
gcc -v
make
make install
-
redis 默认安装路径
/usr/local/bin
-
将源码路径下redis配置文件,复制到
/usr/local/bin/myconfig/
-
修改
redis.conf
配置文件 -
客户端进行验证
-
检测redis默认端口是否在使用中,如在使用则安装程。 netstat -ntlp grep 6379
-
查看redis进程是否开启
ps -ef |grep redis
- 如何关闭redis服务
shutdown
不建议使用,防止把服务器给关掉 - [阿里云安装Redis教程与相关问题](https://www.cnblogs.com/blackBlog/p/12924891.html
3. 性能测试 - redis-benchmark
测试:100个并发链接,100000请求!
redis-benchmark -h localhost -p 6379 -c 100 -n 100000
4. Redis基础知识
-
redis默认有16个数据库
-
选择数据库
select index
-
查看当前数据库的大小
dbsize
-
清空当前数据库
flushdb
\ 清空所有数据库flushall
-
查看指定key是否存在
EXISTS key
-
移出指定的key
move key 1
-
让指定数据在指定的时间失效
expire key 10
,单位是秒 -
查看当前key的剩余时间
ttl key
-
查看指定key的类型
type key
5. 五大数据类型
5.1. String类型
-
追加字符串
APPEND key value
-
获取字符串的长度
STRLEN
-
自增/自减运算
INCR/DECR
-
自增/自减指定的值
INCRBY/DECRBY
-
获取某个范围
GETRANGE
的字符串 -
替换某个范围的字符串
SETRANGE
-
设置过期时间
SETEX
-
不存在的时候才设置
SETNX
-
批量设置/获取值
MSET,MSETNX/MGET
-
获取当前的值的同时设置一个新值
GETSET
5.2. List类型
-
List当中插入一个元素
LPUSH/RPUSH
-
List当中获取指定元素
LRANGE
-
移出List集合中的一个元素
LPOP/RPOP
-
移出List集合中指定的元素
LREM
-
根据索引(下标)获取集合中元素值
LINDEX
-
获取List的长度
LLEN
-
裁剪List为原来的一部分(直接修改原有List集合)
-
移出列表的最后一个元素,并移动到新的列表中
RPOPLPUSH
-
将列表中指定的下标值替换为另一个值,更新操作,如果下标不存在就会报错
-
在list集合中的指定元素前面插入值
linsert lst before world xiaofan
5.3.Set集合
-
集合中添加元素
sadd myset hello kuangshen lovekuangshen
-
查看集合中的元素
SMEMBERS
-
判断某个元素是否存在于集合中
SISMEMBER myset hello
-
获取集合中元素个数
SCARD
-
移出集合中指定的元素值
SREM
-
随机获取Set集合中的值
SRANDMEMBER
-
随机删除集合中的一个元素
SPOP
-
移动指定的元素到另一个集合当中去
SMOVE
-
差集/交集/并集
SDIFF/SINTER/SUNION
5.4. Hash集合
-
设置一个具体的字段值
hset myhash field2 value2
-
设置多个个具体的字段值
hmset myhash field2 value2 field3 value3
-
获取多个指定的字段值
hmget myhash field1 field2
-
获取全部的值
hgetall myhash
-
删除hash指定的键
HDEL myhash field1
-
获取键值对的个数
HLEN
判断hash中指定字段是否存在HEXISTS
-
获取所有的key、value
HKEYS/HVALS
5.5. Zset有序集合
-
添加元素
zadd myset 1 one 2 two 3 three
-
获取所有元素
zrange myset 0 -1
-
排序
ZREVRANGEBYSCORE key max min WITHSCORES LIMIT offset count
-
升序/降序
zrange myzset 0 -1/ZREVRANGE myzset 0 -1
-
获取指定区间的元素个数
zcount myzset 1 4
6. 三种特殊的饿数据类型
6.1. geospatial 地理位置
127.0.0.1:6379> geoadd china:city 116.405285 39.904989 beijing
(integer) 1
127.0.0.1:6379> geoadd china:city 121.472644 31.231706 shanghai
(integer) 1
127.0.0.1:6379> geoadd china:city 106.504962 29.533155 chongqing
(integer) 1
127.0.0.1:6379> geoadd china:city 120.153576 30.287459 hangzhou
(integer) 1
127.0.0.1:6379> geoadd china:city 125.14904 42.927 xian
(integer) 1
127.0.0.1:6379> geoadd china:city 112.549248 37.857014 taiyuan
(integer) 1
- geopos 获取指定城市的经纬度
127.0.0.1:6379> geopos china:city taiyuan
1) 1) "112.54924803972244263"
2) "37.85701483724372451"
127.0.0.1:6379> geopos china:city beijing
1) 1) "116.40528291463851929"
2) "39.9049884229125027"
- geodist 获取两个位置之间的距离
m 为米。
km 为千米。
mi 为英里。
ft 为英尺。
127.0.0.1:6379> geodist china:city beijing taiyuan km
"404.1120"
127.0.0.1:6379> geodist china:city beijing shanghai
"1067597.9668"
127.0.0.1:6379> geodist china:city beijing shanghai km
"1067.5980"
- GEORADIUS具体指定位置多少范围内的所有城市
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km
1) "chongqing"
2) "hangzhou"
3) "taiyuan"
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km
1) "chongqing"
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km withcoord
1) 1) "chongqing"
2) 1) "106.50495976209640503"
2) "29.53315530684997015"
2) 1) "hangzhou"
2) 1) "120.15357345342636108"
2) "30.28745790721532671"
3) 1) "taiyuan"
2) 1) "112.54924803972244263"
2) "37.85701483724372451"
# 获取指定的个数
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km withcoord count 2
1) 1) "chongqing"
2) 1) "106.50495976209640503"
2) "29.53315530684997015"
2) 1) "taiyuan"
2) 1) "112.54924803972244263"
2) "37.85701483724372451"
- GEORADIUSBYMEMBER 找出位于指定元素周围的其他元素
127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1000 km
1) "taiyuan"
2) "beijing"
3) "xian"
- geohash 命令,返回一个或者多个位置元素的geohash表示
该命令将返回11个字符的Geohash字符串,如果两个字符串越接近,表示距离越近!
127.0.0.1:6379> geohash china:city beijing chongqing
1) "wx4g0b7xrt0"
2) "wm78p86e170"
GEO 底层的实现原理其实就是Zset!我们可以使用Zset命令来操作geo