redis常用数据结构与安装使用

概念: redis是一款高性能的NOSQL系列的非关系型数据库

redis的安装与使用:

1、准备工作(安装gcc依赖)

yum -y install gcc-c++  

2、下载并解压源码包

cd /usr/local #进入/usr/local目录
wget http://download.redis.io/releases/redis-5.0.0.tar.gz #下载redis
tar -zxvf redis-5.0.0.tar.gz #解压redis
mv redis-5.0.0 redis #重命名
cd redis/  #进入redis目录
make && make install 将redis相关命令安装到/usr/local/bin 中
[root@localhost local]# cd bin
[root@localhost bin]# ll
total 32628
-rwxr-xr-x. 1 root root 4366520 Apr 13 01:19 redis-benchmark
-rwxr-xr-x. 1 root root 8082664 Apr 13 01:19 redis-check-aof
-rwxr-xr-x. 1 root root 8082664 Apr 13 01:19 redis-check-rdb
-rwxr-xr-x. 1 root root 4783424 Apr 13 01:19 redis-cli
lrwxrwxrwx. 1 root root      12 Apr 13 01:19 redis-sentinel -> redis-server
-rwxr-xr-x. 1 root root 8082664 Apr 13 01:19 redis-server

3.修改redis配置文件 vi /usr/local/redis/redis.conf

daemonize yes #后台执行
dir /usr/local/redis-6379 #工作目录
bind 0.0.0.0 #ip访问控制,这里是所有ip都可以访问
requirepass 123456 #设置redis的密码
port 6379 #端口号
pidfile /var/run/reids_6379.pid #进程id存放文件
maxclient 0 #客户端的最大连接数,默认0就是不限制
timeout 0 #客户端连接的超时时长,默认0就是关闭不限制

4,启动redis
redis-server redis.conf

5,客户端连接到服务器

redis-cli -h host -p port -a password

host:远程redis服务器host

port:远程redis服务端口

password:远程redis服务密码(无密码的的话就不需要-a参数了)

注意:redis默认配置有16个DB数据库,可以增减
flushdb #这个命令可以删除当前DB中所有数据
flushall #删除所有DB中的数据
#如果要关闭这两个命令,配置文件中设置:
rename-command RLUSHDB “”
rename-command FLUSHALL “”

为什么要使用内存缓存数据库?

往往导致数据库缓慢或宕机的原因都是查询操作导致的(对数据库操作大约80%都查询操作)。所以我们需要把经常查询的数据缓存到内存缓存数据库中。

常见的内存缓存数据库:
Ehceche
优点:基于java开发的,被apaceh认证
基于jvm缓存的
简单,轻巧,方便(广泛的应用于hibernate,mybatis)
缺点:
不支持集群,单点
不支持分布式,存储容量不支持扩展

memcache:
优点:简单的key-value,内存使用率比较高
支持多核多线程
缺点:
无法容灾
无法持久化
redis:
优点:
丰富的数据结构
持久化:RDB,AOF
支持主从同步,故障转移
支持分布式
缺点:
单线程
单核(无法充分利用cpu多核性能,建议使用多实例)

redis 线程模型:
在这里插入图片描述
redis作为单线程模型为什么效率还这么高呢?

1,纯内存访问

2,非阻塞式的I/O操作:redis采用epol作为 I/O 多路复用技术的实现

3,采用单线程避免不必要的上下文切换和竞争条件

在这里插入图片描述

String的常用命令:

192.168.227.135:6379> set name hello
OK
192.168.227.135:6379> get name
"hello"
192.168.227.135:6379> del name
(integer) 1
192.168.227.135:6379> mset user:1:name ping user:1:age 18
OK
192.168.227.135:6379> mget user:1:name user:1:age
1) "ping"
2) "18"
192.168.227.135:6379> incr user:1:age //必须为整数自加1,非整数返回错误,无相应的key从0自增返回1
(integer) 19
192.168.227.135:6379> decr user:1:age //必须为整数自减1,非整数返回错误,无相应的key从0自减返回-1 
(integer) 18
192.168.227.135:6379> decrby user:1:age 2 //必须为整数自减2,非整数返回错误,无相应的key从0自减返回-2
(integer) 16
192.168.227.135:6379> incrby user:1:age 2 //必须为整数自加2,非整数返回错误,无相应的key从0自增返回2
(integer) 18
192.168.227.135:6379> incrbyfloat user:1:age 1.1 //加上一个浮点数
"19.1"
192.168.227.135:6379> set name hello
OK
192.168.227.135:6379> append name world //追加一个字符串
(integer) 10
192.168.227.135:6379> get name
"helloworld"
192.168.227.135:6379> strlen name //查看字符长度
(integer) 10
192.168.227.135:6379> getrange name 2 4 // 截取字符下标2到下标4位置的字符串
"llo"

set / setnx  : 后者如果有数据就不生效,前者有数据就覆盖

在这里插入图片描述
Hash常用命令:
hash是一个string类型的field和value的映射表,hash特适合用于存储对象
命令格式: hset key field value

hset user:1 name ping //成功返回1,失败返回0
hget user:1 name //返回ping
hdel user: name //返回删除的个数
hset user:1 name ping
hset user:1 age 18
hlen user:1 //返回2,user:1有两个属性值

192.168.227.135:6379> hmset user:2 name jack age 30 //批量设值
OK
192.168.227.135:6379> hmget user:2 name age //批量取值
1) "jack"
2) "30"
192.168.227.135:6379> hvals user:2 //获取所有value
1) "jack"
2) "30"
192.168.227.135:6379> hgetall user:2 //获取field与value
1) "name"
2) "jack"
3) "age"
4) "30"
192.168.227.135:6379> hincrby user:2 age 1 //整数加1
(integer) 31
192.168.227.135:6379> hincrbyfloat user:2 age -2 //浮点型加-2
"29"

hash的应用实例:

购物车列表功能分析:根据用户id来查询该用户购物车的商品,购物车中根据商品的id来分开不同商品,如果加进购物车的id相同,就把购物已有的商品id的对应的商品的数量加上新添加购物车的商品的数量

购物车列表: 以用户的id作为key,商品id作为field,value为商品数量

192.168.227.135:6379> hset cart:userid goodsid goodnum
(integer) 1

list 常用命令:

192.168.227.135:6379> lpush userList 1 2 3 4 5 
(integer) 5
192.168.227.135:6379> lpop userList //删除列表最左边的元素,并将元素返回(栈)
"5"
192.168.227.135:6379> rpop userList //删除列表最右边的元素,并将元素返回(队列)
"1"
192.168.227.135:6379> lrange userList 0 -1 //从下标为0获取,-1表示获取全部
1) "4"
2) "3"
3) "2"

在这里插入图片描述

set 常用命令:

192.168.227.135:6379> exists user //检查user键值是否存在
(integer) 0
192.168.227.135:6379> sadd user  a b c //向user插入3个元素,返回3
(integer) 3
192.168.227.135:6379> sadd user a d //若再加入相同的元素,则重复无效,不重复的元素会插入,返回插入元素的个数
(integer) 1
192.168.227.135:6379> smembers user //获取user的所有元素,返回结果无序
1) "c"
2) "b"
3) "d"
4) "a"
192.168.227.135:6379> srem user a //返回1,删除a元素
(integer) 1
192.168.227.135:6379> scard user //返回元素的个数
(integer) 3

zset:一个带有评分的集合
不允许重复元素,且元素有顺序.每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。


		1. 存储:zadd key score value
			127.0.0.1:6379> zadd mysort 60 zhangsan
			(integer) 1
			127.0.0.1:6379> zadd mysort 50 lisi
			(integer) 1
			127.0.0.1:6379> zadd mysort 80 wangwu
			(integer) 1
		2. 获取:zrange key start end [withscores]
			127.0.0.1:6379> zrange mysort 0 -1
			1) "lisi"
			2) "zhangsan"
			3) "wangwu"

			127.0.0.1:6379> zrange mysort 0 -1 withscores
			1) "zhangsan"
			2) "60"
			3) "wangwu"
			4) "80"
			5) "lisi"
			6) "500"
		3. 删除:zrem key value
			127.0.0.1:6379> zrem mysort lisi
			(integer) 1

特殊结构:GEO
在redis3.2版本后才支持的

192.168.227.135:6379> geoadd china:city 116.408 39.904 beijing 121.445 31.213 shanghai 113.265 23.108 guangzhou 114.109 22.544 shenzhen 108.969 34.285 xian 108.55 34.09 changan #添加地理坐标
(integer) 6
192.168.227.135:6379> geodist china:city shanghai beijing km 获得两个节点间的距离 ,后面单位可以为 m,km..
"1068.2320"

#搜一搜周边,附近的人
192.168.227.135:6379> georadiusbymember china:city beijing 1300 km withdist withcoord asc count 2
1) 1) "beijing"
   2) "0.0000"
   3) 1) "116.40800267457962036"
      2) "39.90399988166036138"
2) 1) "xian"
   2) "908.2962"
   3) 1) "108.96899789571762085"
      2) "34.28499959898385896"

通用命令:

		1. keys * : 查询所有的键
		2. type key : 获取键对应的value的类型
		3. del key:删除指定的key value
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值