一、什么是Redis
远程字典服务器, Remote dictionary server,⼀个开源的基于内存的数据库,常⽤作键值存储、缓存和消息队列等。Redis通常将全部数据存储在内存中,也可以不时的将数据写⼊硬盘实现持久化,但仅⽤于重新启动后将数据加载回内存。
二、启动Redis服务和Redis客户端链接
1、启动Redis服务代码
redis-server.exe redis.windows.conf
2、打开Redis客户端链接的代码
redis-cli.exe -h 127.0.0.1 -p 6379
3、通过shutdown
命令来关闭redis服务
三、Redis操作
1、基本操作
(1) 数据库操作
redis默认有16个数据库,编号为0~15,且默认访问0号数据库。
select 数据库编号 | 选择指定数据库 |
dbsize | 获取当前数据键值对数量 |
flushdb | 清空当前数据库 |
flushall | 清空所有数据库 |
save | 将数据库保存至磁盘 |
bgsave | 将数据库异步保存至磁盘(后台:Background) *默认每两秒自动执行一次 |
lastsave | 获取最后一次成功保存的unix秒 |
(2)通用数据操作
keys格式 | 查看符合指定格式的key, * 为通配符 |
exists key1[key2 …] | 查看是否存在一至多个指定的key |
type key | 按key查看value的数据类型 |
del key1[key2 …] | 按key删除一至多个键值对 |
rename key1 key2 | 重命名key1,如果key2已经存在,其值会被覆盖 |
renamenx key1 key2 | key2不存在时重命名key1 |
move key 数据库编号 | 按key将一个键值对移动到指定数据库 |
copy key1 key2 | 将key1的值拷贝给key2 |
get key | 打开db库 |
get key | 获取指定 key 的值 |
set key value | 设置指定 key 的值(新增) |
del key | 设置指定 key 的值(新增) |
keys * | 显示所有key值 |
2、字符串String操作
key-value 结构,value 除了字符串还可以是数字(整型、浮点型)
set key value #设置key valuesetex key n value #设置 key 和 value 并设置过期时间, n 代表设置的时间(秒)set key value ex n #设置 key 和 value 并设置过期时间, n 代表设置的时间(秒)set key value px n #设置 key 和 value 并设置过期时间, n 代表设置的时间(毫秒)setrange key 0 value #替换某个key 指定位置开始的字符串setnx key value #判断这个值是否存在,如果存在则不设置值,如果不存在则设置值mset key value key value key value #设置多个 key valuemget key key key #获取多个 key 的值msetnx key value name value #设置多个值,如果存在就创建,不存在就不创建,这是原子性操作,要么全部成功要么全部失败exists key #判断某个 key 是否存在move key value(目标数据库) #移除当前 key 到某个数据库中expire key value(时间:单位为S) #设置 key 个值得过期时间ttl key #查看某个 key 的过期时间type key #查看这个 key 的类型append key value #追加某个 key 的值,如果这个 key 不存在,就相当于 set keystrlen key #获取字符串的长度incr key #当前 key 自增1decr key #当前 key 自减1incrby key 10 #当前 key 增加多少decrby key 5 #当前 key 减少多少del key #删除某个keygetrange key 0 3 #获取这个 key 从某个下标到某个下标的值getrange key 0 -1 #获取这个 key 所有的值等同于 get nameset user:1 {name:value,age:value} #设置 JSON 值mset user:1:key zhangsan user:1:age 13 #设置 JSON 值(需要注意的是 Windows 系统的 Redis 不支持这样操作)getset key value #先get再set
3、List操作
lpush list value #往一个集合里面进行插值(尾部)lrange list 0 -1 #获取这个集合所有的值lrange list 0 2 #获取这个集合0 - 2之间的值rpush list value #往一个集合里面进行插值(头部)lpop list #移除列表尾部的值rpop list #移除列表头部的值lindex list 1 #根据下标获取list中的值llen list #获取列表的长度lrem list 1 value #移除list中指定的值ltrim list 1 3 #通过下标截取list指定的长度,只保留截取的,剩下的删除
4、Set操作
Set是无序不重复集合。
sadd name value #设置Set集合值smembers name #读取某个Set的值sismember name value #判断某个值是否在Set集合中scard name #获取Set集合中的值个数srem name value #移除Set集合中的某个数据srandmember name #从Set集合中随机抽选一个值spop name #从Set集合中随机删除元素smove name name2 value #从Set集合中将某个数据移动到另一个Set集合中去sdiff name name2 #获取两个集合的差集sinter name name2 #获取两个集合的交集sunion name name2 #获取两个集合的并集
5、Hash
Map集合,Key-
hset name key value #设置Hash的值hget name key #获取Hash的值hmset name key1 value1 key2 value2 #设置多个值hgetall name #获取Hash中所有的值,以key-value展示hdel name key #删除Hash中指定的key-valuehlen name #获取Hash中的Key数量hexists name key #判断Hash中是否存在该Keyhkeys name #获取Hash中所有Keyhvals name #获取Hash中所有valuehincrby name key 1 #使Hash中的某个Key的值自增某个值hsetnx name key value #判断Hash中是否存在该Key如果不存在则设置,存在则不设置
6、Zset
有序集合,应用于工资表排序,成绩表排序、排行榜、Top N。
zadd name 1 value #设置zset的值,1 表示的是优先级zadd name 1 value 2 value #设置多个zset的值zrange name 0 -1 #获取这个zset中的所有值zrangebyscore name -value +value #排序一个集合,第一个value是最小数,如果 -inf 表示负无穷,+inf 表示正无穷,只显示Key,这是升序zrangebyscore name -value +value withscore #排序集合并将Key和value显示,这是升序zrevrange name 0 -1 #降序排列,只显示Keyzrem name key #删除zset集合中的Key和Valuezcard name #获取Zset集合中的个数zcount name 1 2 #获取set集合中某个区间的值
7、Geospatial
GEO底层是由Zset进行实现的,所有可以使用Zset命令来操作;
地理位置、附近的人、打车距离位置计算;
redis的Geo在redis3.0推出的;
geoadd name 经度 维度 名称 #插入城市的经纬度和名称geopos name key #获取该城市的经纬度 geodist name key1 key2 km/m/mi/ft #获取两个位置直接的距离可以是千米、米、英里、英尺#我附近的人,以给定的经纬度为中心,通过半径查询georadius name 110(用户自己的经度) 30(用户自己的维度) 1000 km #半径寻找georadius china:city 110 30 500 km withdist #显示中间的距离georadius china:city 110 30 500 km withcoord #显示他人的经纬度georadius china:city 110 30 500 km withdist count 2 #只显示2人georadiusbymember name key 1000 km #以该元素为中心寻找1000KM内的对象geohash name key key #将二维的经纬度转换为一维的字符串(11位的字符串),如果两个字符串越接近,那么则距离越近
8、Hyperloglog
数据不能重复;
Reids2.8.9版本推出的;
是用于做基数统计的算法;
优点:占用的内存是固定的;
会有一个0.81%的错误率;
如果允许容错,一定使用Hyperloglog;
pfadd name value value value value value #存储Hyper数据pfcount name #查看该Hyper的长度pfmerge name1 name2 name3 #将name2和name3中的数据复制到name1中(不可重复)
9、Bitmap
使用位存储(0 1 0 1 0 1);
统计用户信息:登陆、未登录,活跃、不活跃;(两个状态)
setbit name 3 1 #插入值,第一个数字代表位置,第二个数字代表状态getbit name 3 #查询值,3代表的是位置bitcount name #统计1的数字有几个