redis(一) 安装以及基本数据类型操作

redis安装和使用

redis安装

wget http://download.redis.io/redis-stable.tar.gz
tar zxvf redis-stable.tar.gz
cd redis-stable.tar.gz
make
make install

redis启动

redis-server

redis关闭
redis-cli shutdown

配置

方法一

redis-server /path/to/redis.conf
redis-server /path/to/redis.conf --loglevel warning //设置日志级别

方法二

redis-cli
redis > CONFIG SET loglevel warning

多数据库的选择

默认情况下,客户端自动选择0号数据库。
可以使用select命令来选择其他数据库。
> select 1

redis不可以设置数据库的名称,数据库是通过编号来使用的。
redis只有一个全局的密码,不存在访问某个数据库的密码。

数据库基本操作

(1)添加数据和查找数据,通过set/get命令添加和获取数据

127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> set bar 1
OK
127.0.0.1:6379[1]> get bar
"1"
127.0.0.1:6379[1]> get aaa
(nil)

(2)判断一个键是否存在,exists命令可以判断key是否存在,存在返回1,不存在返回0

127.0.0.1:6379[1]> exists bar
(integer) 1
127.0.0.1:6379[1]> exists aaa
(integer) 0

(3)删除数据,del命令删除key,返回值为成功删除key的个数

127.0.0.1:6379[1]> del aaa
(integer) 0
127.0.0.1:6379[1]> del bar
(integer) 1

(4)获取value的类型

127.0.0.1:6379[1]> set bar 1
OK
127.0.0.1:6379[1]> type bar
string

(5)自增和自减,incr 、decr以及incrby和decrby实现整数的加减

127.0.0.1:6379[1]> INCR ab
(integer) 1
127.0.0.1:6379[1]> INCR ab
(integer) 2
127.0.0.1:6379[1]> INCRBY ab 2
(integer) 4
127.0.0.1:6379[1]> DECR ab
(integer) 3
127.0.0.1:6379[1]> DECRBY ab 2
(integer) 1

(6)增加指定浮点数,incrbyfloat可以指定自增的浮点数

127.0.0.1:6379[1]> INCRBYFLOAT ab 1.1
"2.1"

(7)向尾部追加,append命令可以向字符尾部追加内容

127.0.0.1:6379[1]> set key hello
OK
127.0.0.1:6379[1]> append key world
(integer) 10
127.0.0.1:6379[1]> get key
"helloworld"

(8)获取字符串长度,strlen获取value的长度

127.0.0.1:6379[1]> STRLEN key
(integer) 10

(9)批量设置和获取,通过mset和mget命令可以批量执行设置和获取

127.0.0.1:6379[1]> mset key1 va1 key2 va2
OK
127.0.0.1:6379[1]> mget key1 key2
1) "va1"
2) "va2"

(10)位操作

getbit key offset
setbit key offset
bitcount key [start] [end]
bitop operation destkey key [key ...]

散列类型

其实这里的散列类型就是类似于非结构化数据,json数据一样。
{"id":1,"name":"test"
}

基本操作

(1)存储方法,可以通过hset和hget来设置和获取数据

127.0.0.1:6379[1]> hset user id 1
(integer) 1
127.0.0.1:6379[1]> hset user name test
(integer) 1
127.0.0.1:6379[1]> hget user id
"1"
127.0.0.1:6379[1]> hget user name
"test"

(2)判断字段是否存在,hexists命令,返回1存在,返回0不存在

127.0.0.1:6379[1]> hexists user id
(integer) 1
127.0.0.1:6379[1]> hexists user age
(integer) 0

(3)使用hsetnx(hset if not exists)如果不存在赋值

127.0.0.1:6379[1]> hsetnx user age 111
(integer) 1
127.0.0.1:6379[1]> hget user age
"111"

(4)增加数字

127.0.0.1:6379[1]> hincrby user score 60
(integer) 60
127.0.0.1:6379[1]> hget user score
"60"

(5)删除字段

127.0.0.1:6379[1]> hdel user score
(integer) 1
127.0.0.1:6379[1]> hget user score
(nil)

如何存储数据?

(1)使用散列类型存储数据,散列数据包括三部分(键、字段、字段值)
键           字段     字段值
post:id    field     value

127.0.0.1:6379[1]> incr userid
(integer) 1
127.0.0.1:6379[1]> hset user:1 name test
(integer) 1
127.0.0.1:6379[1]> hset user:1 score 90
(integer) 1
127.0.0.1:6379[1]> incr userid
(integer) 2
127.0.0.1:6379[1]> hset user:2 name test2
(integer) 1
127.0.0.1:6379[1]> hset user:2 score 99
(integer) 1

添加了两条数据,id为1的名字为test分数为90,而id为2的名字为test2分数为90.

(2)获取多个字段的数据,需要使用hmget命令,并制定字段名称
127.0.0.1:6379[1]> hmget user:1 name score
1) "test"
2) "90"

(3)获取一行数据,不需要指定字段名称,只需要指出键名
127.0.0.1:6379[1]> hgetall user:2
1) "name"
2) "test2"
3) "score"
4) "99"

(4)只获取字段名或字段值
127.0.0.1:6379[1]> hkeys user:1
1) "name"
2) "score"
127.0.0.1:6379[1]> hvals user:1
1) "test"
2) "90"

(5)获取字段数量
127.0.0.1:6379[1]> hlen user:1
(integer) 2

需要注意的是,散列类型无法获取所有存在的键值,也就是id,如果删除了中间某个id的话,只可以使用exist命令来判断key是否存在。

列表类型

类表类型解决了上述的问题。
类表类型是有序的,值是可以重复的。
列表类型是通过双向链表实现的,向列表两端添加元素的时间复杂度为O(1),获取两端元素的速度也是最快。

基本操作

列表的基本操作命令都是以l开头的。

(1)添加和弹出元素使用lpush和rpush以及lpop和rpop分别从列表的左侧和右侧添加和删除元素。
127.0.0.1:6379> lpush user test
(integer) 1
127.0.0.1:6379> rpush user test1
(integer) 2
127.0.0.1:6379> lpop user
"test"
127.0.0.1:6379> rpop user
"test1"
127.0.0.1:6379>

(2)llen查看元素个数
127.0.0.1:6379> llen user
(integer) 0
127.0.0.1:6379> lpush user test
(integer) 1
127.0.0.1:6379> llen user
(integer) 1

(3)获取列表片段
127.0.0.1:6379> lrange user 0 3
1) "test"
2) "test1"
3) "test2"
4) "test3"
127.0.0.1:6379> lrange user 0 2
1) "test"
2) "test1"
3) "test2"

(4)从列表中删除元素
lrem     key     count     value
@count 为删除个数,大于0的话从左边开始,小于0的话从右边开始
@value 要删除的值

我们可以把数据的id存储在列表中,当某一行数据被删除时候,只需要删除为该value为key即可,而查询数据的时候,需要先从列表中读取所有的id,再从散列表中读取数据。

(5)获取和设置索引元素值
(6)向列表中插入元素
127.0.0.1:6379> lrange user 0 -1
1) "test"
2) "test1"
3) "test2"
4) "test3"
127.0.0.1:6379> linsert user before test1 test0
(integer) 5
127.0.0.1:6379> linsert user after test1 test1.5
(integer) 6
127.0.0.1:6379> lrange user 0 -1
1) "test"
2) "test0"
3) "test1"
4) "test1.5"
5) "test2"
6) "test3"

(7)将元素从一个列表转移到另外一个列表
rdroplpush     source     destination
从source列表的右侧弹出一个数据,添加到destination列表的左侧

集合类型

集合中不允许重复数据的出现,数据是唯一的,无序的。
空的散列表的HASH TABLE实现,因此操作时间复杂度为O(1)。
(1)增加sadd和删除srem、获取所有元素smembers,返回值标识成功添加元素的数量:
127.0.0.1:6379> sadd key 1
(integer) 1
127.0.0.1:6379> sadd key 2
(integer) 1
127.0.0.1:6379> sadd key 2
(integer) 0
127.0.0.1:6379> smembers key
1) "1"
2) "2"
127.0.0.1:6379> srem key 2
(integer) 1
127.0.0.1:6379> smembers key
1) "1"

(2)判断元素是否在集合中可以使用sismember命令。
127.0.0.1:6379> sismember key 1
(integer) 1
127.0.0.1:6379> sismember key 3
(integer) 0

(3)集合运算
sdiff      key     [key...]
sinter     key     [key...]
sunion     key     [key...]

(4)获取元素个数
127.0.0.1:6379> scard key
(integer) 1

(5)集合运算并保存结果
sdiffstore       destination     key [key...]
sinterstore      destination     key[key...]
sunionstore      destination     key[key...]

(6)随机获取集合的元素
srandmember key [count]127.0.0.1:6379> srandmember key 3
1) "4"
2) "2"
3) "3"

需要注意,srandmember取到的随机元素在集合比较小的情况下并不是完全随机的,由于redis的存储方法是利用哈希桶+数据链的存储方式,当桶和每个桶内元素的个数都非常小时就会造成取到相同数据的情况。

有序集合类型 sorted set

与普通的集合类型相比,有序集合为集合中的每一个元素都关联了一个分数,这使得我们不仅可以完成插入、删除和判断元素是否存在等集合的基本操作,还能够得到分数最高(或最低)的前n个元素、获得指定分数范围内的元素等与分有关的操作,虽然集合中的元素必须是不同的,但是其分数是可以相同的。
有序结合和列表的使用区别:
(1)列表类型是通过链来实现的,获取靠近两端数据的速度极快,而当元素增多后,访问中间元素的数据就会变慢,所以她更适合实现如“新鲜事”或“日志”这样少访问中间元素的应用。
(2)有序集合类型是使用散列和跳跃表实现的,所以即使读取位于中间部分数据的速度也很快(时间复杂度为O(log(n)))。
(3)列表中不能简单地调整某个元素的位置,但有序集合可以通过调整分数来实现位置的调整。
(4)有序集合更加消耗内存。

基本操作

(1)zadd添加元素,并设置分数score

127.0.0.1:6379> zadd students 60 xiaoming
(integer) 1
127.0.0.1:6379> zadd students 80 daxiong
(integer) 1

(2)zscore获取元素分数
127.0.0.1:6379> zscore students xiaoming
"60"

(3)获取排名在某个范围的列表,元素是从0开始的
127.0.0.1:6379> zrange students 0 1
1) "xiaoming"
2) "daxiong"

(4)获取指定分数范围的元素,用于筛选数据
127.0.0.1:6379> zrangebyscore students 0 70
1) "xiaoming"
127.0.0.1:6379> zrangebyscore students 0 100
1) "xiaoming"
2) "daxiong"

limit命令可以实现sql语句中的Limit效果
获取从0开始的前2个数据
127.0.0.1:6379> zrangebyscore students 0 100 limit 0 2
1) "xiaoming"
2) "daxiong"
获取从1开始的前2个数据
127.0.0.1:6379> zrangebyscore students 0 100 limit 1 2
1) "daxiong"

(5)增加和减少某个元素的分数
127.0.0.1:6379> zincrby students 5 xiaoming
"65"
127.0.0.1:6379> zincrby students -5 xiaoming
"60"

(6)获取集合中元素个数
127.0.0.1:6379> zcard students
(integer) 2

(7)获取指定分数范围内的元素个数
zcount     key     min     max127.0.0.1:6379> zcount students 0 70
(integer) 1
127.0.0.1:6379> zcount students 0 90
(integer) 2

(8)删除一个或多个元素
zrem     key     [key...]

(9)按照排名范围来删除元素
zremrangebyrank     key     start     stop

(10)按照分数范围来删除元素
zremrangebyscore     key     min     max

(11)获取元素的排名,注意元素从0开始排序
127.0.0.1:6379> zrank students xiaoming
(integer) 0

参考

redis入门指南

http://redis.readthedocs.org/en/latest/

转载于:https://www.cnblogs.com/coder2012/p/4391273.html

redis(一) 安装以及基本数据类型操作相关推荐

  1. Redis:安装、配置、操作和简单代码实例(C语言Client端)[转]

    我转的地址: http://blog.csdn.net/hj19870806/article/details/8724907 听说游戏的用的比较多,所以了解下. --以下为转载内容 Redis是一个开 ...

  2. linux下清理redis缓存文件夹,redis的安装和清理缓存操作

    Redis的脚本安装 参考文章: 第一步 编译redis 第二步 拷贝redis执行文件,修改配置文件,并启动 批量关闭redis端口 8001到8009 批量启动redis端口 8001到8009 ...

  3. Redis简介、与memcached比较、存储方式、应用场景、生产经验教训、安全设置、key的建议、安装和常用数据类型介绍、ServiceStack.Redis使用(1)...

    1.NOSQL简介 nosql的产生并不是要彻底的代替关系型数据库,而是作为传统关系型数据库的一个补充. Facebook和360使用Cassandra来存储海量社交数据 Twitter在其url抓取 ...

  4. redis安装和基本数据类型

    1. 安装 1.1 安装包 从官网下载安装包本文下载的是最新的7.0.4版本,linux为centos7 地址:https://github.com/redis/redis/archive/7.0.4 ...

  5. 项目1在线交流平台-4. 使用radis高性能储存方案-1.redis入门-特点、安装与支持数据类型

    文章目录 1.为何使用redis 1.1 NoSQL NoSQL数据库特点 常见NoSQL数据库 1.2 什么是redis,有何特点 1.3 为何选用redis 2. redis的安装与使用 2.1 ...

  6. Redis缓存的安装及基本数据类型命令的使用

    Redis基础   Redis 是一个开源的.遵循 BSD 协议的.基于内存的而且目前比较流行的键值数据库(key-value database),是一个非关系型数据库, redis 提供将内存通过网 ...

  7. NoSQL概述-Redis安装-常用五大数据类型-概述Bitmaps,HyperLogLog,Geospatial和redis.conf 基本解析

    NoSQL 概述 NoSQL(NoSQL=Not Only SQL),意即"不仅仅是SQL",泛指 非关系型的数据库. NoSQL不依赖业务逻辑方式存储,而以简单的key-valu ...

  8. NOSQL——redis的安装,配置与简单操作

    内容预知 1.缓存的相关知识 1.1 缓存的概念 1.2 系统缓存 1.3 缓存保存位置及分层结构 DNS缓存 应用层缓存 数据层缓存 硬件缓存 2.关系型数据与非关系型数据库 2.1 关系型数据库 ...

  9. redis取mysql数据类型_redis数据类型操作

    redis数据类型操作 一.value exists key:测试指定的key是否存在,1表示存在,0表示不存在 del key1 key2 ...keyN: 删除指定的key type key: 返 ...

最新文章

  1. c# winform 关于给静态全局变量赋值的问题
  2. 关于变量作用域的一点整理
  3. 饿了么风神登录_海底捞首度登陆第三方外卖!联手饿了么全国配送“小火锅”...
  4. CCKS 2018 | 工业界论坛报告简介
  5. java过时_Java 语言的几个缺陷之四: 过时的 JavaBean
  6. 使用Maven管理Eclipse Java项目
  7. 华为云开天aPaaS 上线,服务千万开发者,使能行业场景化创新
  8. jqueryForm 异步上传图片文件
  9. 微积分知识总览(1)——微积分准备知识
  10. 【Axure图标库】单线形图标元件库 细线矢量图标1000+
  11. 如何将UCI数据集转换成Matlab可用格式
  12. 通达信标记符号_史上最全的通达信软件中常见的一些字母/字符标识的含义(图解)...
  13. 射频芯片设计EM仿真(二)--对比EM仿真和schmetic仿真
  14. php富文本防注入_HTML Purifier,PHP中过滤富文本防止XSS攻击
  15. 五环电阻和四环电阻的区别是什么
  16. RHCE 第八次作业
  17. UI自动化偷懒必备:AirTest封装好ADB命令
  18. 什么是量化交易-量化交易demo
  19. 顺丰丰桥接口开发-java(订单取消接口)
  20. Idea 2020.1如何改变JetBrains Runtime(jbr)

热门文章

  1. android地图定位
  2. JQuery 1.32 DatePicker 增强版
  3. 心情不能平静,慢慢的调节
  4. 震精~python运算符还能这么玩~到底这么做到的?神级程序员解密!
  5. androidwakelock_Android音频播放时wakelock的实现
  6. android 联系人编辑界面,android – 以编程方式编辑联系人的姓名/电话号码
  7. 常用构建数据科学应用程序的七个Python库
  8. 牛客练习赛32 -- Xor Path
  9. 聚类分析在用户行为中的实例_序列模式挖掘在用户行为分析中的应用
  10. 洛谷 P4463 [集训队互测 2012] calc(拉格朗日插值优化DP)